我有以下两个接口(interface)不能修改:
interface User {
username: string;
email?: string;
age?: number;
country?: string;
}
interface Player {
room: number;
group?: string;
device?: string;
}
我想将它们组合成一个界面:Member
,同时制作字段:User['email']
和 Player[' group']
强制性的(只有那 2 个)。
我尝试了以下方法(作为起点(待定)):
// please edit this code accordingly
interface Member extends User, Player {}
然后,预期的结果是得到一个错误:
const member: Member = {
username: 'bill.gates',
// email: 'bill.gates@microsoft.com',
age: 50,
room: 5,
// group: 'A',
}
因为未指定 email
和 group
。
这里有一个 Playground .
谢谢!
最佳答案
您可以使用 Utility Types 中的 Pick
、Required
和 Omit
的组合来实现这一点.
type Member = Required<Pick<User & Player, 'email' | 'group'>> & Omit<User & Player, 'email' | 'group'>;
/*
Type '{ username: string; age: number; room: number; }' is not assignable to type 'Member'.
Type '{ username: string; age: number; room: number; }' is missing the following properties from type 'Required<Pick<User & Player, "email" | "group">>': email, group(2322)
*/
const member: Member = {
username: 'bill.gates',
// email: 'bill.gates@microsoft.com',
age: 50,
room: 5,
// group: 'A',
}
关于javascript - TypeScript - 结合两个接口(interface)并使其某些成员成为强制性的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59134914/