Javascript TypeScript-将多个接口合并为一个
我只想将几个接口合并为一个接口:成员: 我的问题是:如何通过组合上述接口来创建一个新的接口:Member,因此我最终得到以下结果: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; } 请注意,结构有点变化。例如
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强制?它们在原始接口上是可选的