已知密钥和未知密钥的打字稿类型

时间:2017-11-04 08:33:02

标签: typescript

我想声明一个至少包含一些必需键的对象,而对象可能包含任何其他键。

例如,对象student必须具有键namegender,并且任何其他键都可以接受。如何申报打字?

let student:{name:string, gender:string, ???};

//these must be valid
student = {
    name:'Goku',
    gender:'male',
    power:'Super Saiyan'
}

student = {
    name:'Pikachu',
    gender:'unknown',
    body:'yellow',
    shoeSize:20
}

我几乎找不到与此相关的任何教程,这似乎很少见,我可能知道这是一个不好的做法吗?为什么?

2 个答案:

答案 0 :(得分:4)

let student: {
  name:string;
  gender:string;
  [key: string]: any;
};

// these are valid
student = {
  name: 'Goku',
  gender: 'male',
  power: 'Super Saiyan'
};

student = {
  name: 'Pikachu',
  gender: 'unknown',
  body: 'yellow',
  shoeSize: 20
};

// this is invalid
student = {
  body: 'yellow',
  shoeSize: 20
};

答案 1 :(得分:0)

也许声明一个名称和性别的界面。 然后使您的类成为实现接口的'Any'的子类。