如何根据对象的属性创建界面?

时间:2018-05-07 09:38:07

标签: javascript angular typescript interface

我正在使用最新的TypeScript和Angular,我有一个对象:

const obj: ObjInterface = {
 prop1: 1,
 prop2: 2,
 prop3: '3'
}

我也有基于该对象的界面:

interface ObjInterface {
  prop1: number;
  prop2: number;
  prop3: string;
}

是否可以创建仅由obj

的属性组成的数组接口
const array: SomeInterface = ['prop1', 'prop2', 'prop3']; // OK
const array: SomeInterface = ['prop1', 'prop2', 'prop4']; // error

1 个答案:

答案 0 :(得分:1)

您可以使用keyof运算符

创建一个类型的键数组
interface ObjInterface {
    prop1: number;
    prop2: number;
    prop3: string;
}
const array: Array<keyof ObjInterface> = ['prop1', 'prop2', 'prop3']; // OK
const array2: Array<keyof ObjInterface> = ['prop1', 'prop2', 'prop4']; // error

注意这将是一个编译时错误,在运行时,如果您在类型系统之外冒险或者使用类型断言,则可以在数组中使用不同的字符串。