Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript TypeScript-将多个接口合并为一个_Javascript_Reactjs_Typescript - Fatal编程技术网

Javascript TypeScript-将多个接口合并为一个

Javascript TypeScript-将多个接口合并为一个,javascript,reactjs,typescript,Javascript,Reactjs,Typescript,我只想将几个接口合并为一个接口:成员: 我的问题是:如何通过组合上述接口来创建一个新的接口:Member,因此我最终得到以下结果: interface Member { firstName: string; lastName: string; age: number; birthdate?: Date; username: string; email: string; room: number; group?: number; } 请注意,结构有点变化。例如

我只想将几个接口合并为一个接口:成员:

我的问题是:如何通过组合上述接口来创建一个新的接口:Member,因此我最终得到以下结果:

interface Member {
  firstName: string;
  lastName: string;
  age: number;
  birthdate?: Date;  
  username: string;
  email: string;
  room: number;
  group?: number;
}
请注意,结构有点变化。例如:Person[name]中的字段现在直接包含在新界面的根级别上。此外,这些字段现在是必填字段,以前是可选字段

谢谢

您应该使用类型 类型成员=个人、用户和玩家

您应该使用类型
类型成员=个人、用户和玩家

可以使用类型的并集来创建成员类型定义。它将不是一个接口。也就是说,它为类型而不是新类型创建别名。但它清楚地显示了该类型及其成员的起源

type Member = Person["name"] & Pick<Person, "age" | "birthdate">
  & User & Player
要定义接口,请扩展这些类型

type T1 = Required<Person> ["name"]
interface Member extends
  T1,
  Pick<Person, "age" | "birthdate">,
  User,
  Player { }
图片的另一个版本是使用排除构造

type T1 = Required<Person> ["name"]
interface Member extends
  T1,
  Pick<Person, Exclude<keyof Person,"name">>,
  User,
  Player { }
这允许您修改Person的属性,更改将传播到成员接口

要强制使用名字和姓氏,您必须提到这一点

type T1 = Required<Required<Person> ["name"]>

可以使用类型的并集来创建成员类型定义。它将不是一个接口。也就是说,它为类型而不是新类型创建别名。但它清楚地显示了该类型及其成员的起源

type Member = Person["name"] & Pick<Person, "age" | "birthdate">
  & User & Player
要定义接口,请扩展这些类型

type T1 = Required<Person> ["name"]
interface Member extends
  T1,
  Pick<Person, "age" | "birthdate">,
  User,
  Player { }
图片的另一个版本是使用排除构造

type T1 = Required<Person> ["name"]
interface Member extends
  T1,
  Pick<Person, Exclude<keyof Person,"name">>,
  User,
  Player { }
这允许您修改Person的属性,更改将传播到成员接口

要强制使用名字和姓氏,您必须提到这一点

type T1 = Required<Required<Person> ["name"]>
现在firstName和lastName是必需的

interface Member extends User, Player, Omit<Person, 'name'> {
  firstName: string;
  lastName: string;
}
现在firstName和lastName是必需的

interface Member extends User, Player, Omit<Person, 'name'> {
  firstName: string;
  lastName: string;
}
将Person接口设置为扁平接口,让我们创建名为PersonName的新接口,新接口如下:

interface PersonName {
  firstName?: string;
  lastName?: string;
}
然后,人员界面将显示为:

interface Person {
  name?: PersonName;
  age: number;
  birthdate?: Date;
}
最后,使用如下语法定义了成员接口:

interface Member extends Player, User, Omit<Person, 'name'>, PersonName  {}
所有代码:

将Person接口制作成扁平接口,让我们创建名为PersonName的新接口,新接口如下:

interface PersonName {
  firstName?: string;
  lastName?: string;
}
然后,人员界面将显示为:

interface Person {
  name?: PersonName;
  age: number;
  birthdate?: Date;
}
最后,使用如下语法定义了成员接口:

interface Member extends Player, User, Omit<Person, 'name'>, PersonName  {}

所有代码:

我想创建一个接口,而不是一个type@viewsonic接口只是一种类型。我想创建一个接口,而不是一个type@viewsonic接口只是一种类型。如何使:firstName和lastName成为必需的?它们在原始界面上是可选的。我可以如何设置:firstName和lastName强制?它们在原始接口上是可选的