非实例化对象接口类型的Object.keys

时间:2019-03-28 21:38:30

标签: typescript

是否可以在接口类型本身上使用Object.keys来获取该对象类型的所有属性?

export interface Apple{
  id: number;
  name: string;
  status: string;
}

Object.keys(Apple)

预期的输出将是[“ id”,“ name”,“ status”],就像普通的Object.keys一样。我似乎找不到实现此目的的方法或文档。

2 个答案:

答案 0 :(得分:2)

这是不可能的,因为TypeScript仅在开发时出现。将代码转换为JavaScript后,将无法在运行时引用回TypeScript类型。

答案 1 :(得分:2)

从文档中,我看到以下Object.keys()的返回值:

  

代表给定对象的所有可枚举属性的字符串数组。

来源:Object.keys()

例如,这意味着如果您有一个从JavaScript实例化的类,则可以将键放入数组,但不能从接口(从TypeScript)获得键:

let redApple = new Apple();
let keys = Object.keys(redApple);
let classKeys = Object.keys(Apple);

console.log('keys of the instance', keys);
console.log('keys of the class', classKeys); 

function Apple() {
  this.id = '';
  this.name = '';
  this.status = '';
}

我们应该始终记住,最后TypeScript将被转换为JavaScript。