簡體   English   中英

TypeScript - 組合兩個接口並使其某些成員成為必需

[英]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',
}

因為沒有指定emailgroup

這里有一個游樂場

謝謝!

您可以通過實用程序類型中PickRequiredOmit組合來實現這一點。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM