如何限制从其他类型派生的类型中可能的属性值

时间:2019-09-18 13:23:56

标签: typescript

假设我已有类型

interface ColDef {
   field: string;
   // some other properties
}

,我想推断出具有相同属性的新类型,但将字段属性重新字符串化为:

field: 'ID' | 'Name' | 'SomeOtherProps'

field: keyof Customer

是否可以从现有类型推断一个新类型并更改一个或多个属性的类型?

2 个答案:

答案 0 :(得分:1)

只需扩展基本类型并覆盖属性定义即可:

interface MyColDef extends ColDef {
  field: 'ID' | 'Name'
}

let myCol: MyColDef = {
  field: 'blabla' //compiler error
};

答案 1 :(得分:0)

您可以使用type创建自定义类型来限制属性值。

type Field = "ID" | "Name" | "SomeOtherProps"

interface ColDef {
   field: Field;
}

在上面的代码中,field仅接受"ID", "Name", "SomeOtherProps"

Demo