假设我有这个示例类,但实际上它具有更多的属性
class Foo {
name: string
dob: number
constructor(name: string, dob: number) {
this.name = name;
this.dob = dob;
}
get age() {
return new Date().getTime() - this.dob
}
}
现在Typescript很聪明,当我实例化该类时,它将为我提供所有正确的属性:
var classInstance = new Foo('name', new Date().getTime())
classInstance.name // ok
classInstance.dob // ok
classInstance.age // ok
在我的代码中某处使用Spread运算符克隆了该类,我不确定TS在幕后做什么,但它确实很聪明,并为我提供了所有正确的属性
var classJSON = {...classInstance};
classJSON.name // ok
classJSON.dob // ok
classJSON.age // missing
这很棒,但是我有时需要使用classJSON
的类型。我想提取它的唯一方法是这样做:
var classJSON = {...new Foo('', 0)}
type ClassJSONType = typeof classJSON;
是否有一种方法可以直接从Foo
中提取类型而无需实例化Java语言?
目前无法实现,因为TS类型系统不允许跟踪非自有属性。正是您想要的proposal。 This comment还描述了表达Spread运算符而不剥离非自有属性的可能方法。