[英]TypeScript - Combine two interfaces and making some of its members mandatory
我有以下兩個無法修改的接口:
interface User {
username: string;
email?: string;
age?: number;
country?: string;
}
interface Player {
room: number;
group?: string;
device?: string;
}
我想將它們組合成一個界面: Member
,同時使字段: User['email']
和Player['group']
必需的(僅這兩個)。
我嘗試了以下(作為起點(待定)):
// 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
。
這里有一個游樂場。
謝謝!
您可以通過實用程序類型中的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',
}
這是一個工作游樂場
像這樣定義成員:
interface Member extends User, Player {
email: string;
group: string;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.