如何合并两个接口并使所有字段可选?

时间:2019-12-02 08:52:14

标签: javascript reactjs typescript

我有两个无法修改的界面

interface Person {
  name: string;
  age: number;
}
interface User {
  username: string;
  password: string;
}

我想将它们组合成一个:Player

// please, modify this code accordingly

interface Player extends Person, User {
  device: string
}

其中nameage是可选的。

所以,如果我这样做:

const member: Player = {
  username: 'bill.gates',
  password: 'M1cRoS0ft',
  device: 'PSP',
}

然后我没有收到错误消息,原因是:nameage丢失了。

这里有Playground

谢谢!

1 个答案:

答案 0 :(得分:4)

您可以使用the native utility type Partial<T>来构建一个接口,该接口的属性是可选的,然后从其扩展。

这将给出以下代码:

interface Person {
  name: string;
  age: number;
}

interface User {
  username: string;
  password: string;
}

interface Player extends Partial<Person>, User {
  device: string;
}

const member: Player = {
  username: 'bill.gates',
  password: 'M1cRoS0ft',
  device: 'PSP',
}

Playground link