【发布时间】:2020-06-28 14:33:59
【问题描述】:
假设我有这个示例类,但实际上它有更多属性
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
在我的代码中某处使用扩展运算符克隆了该类,我不确定 TS 在幕后做了什么,但它真的很聪明,并且为我提供了所有正确的属性
var classJSON = {...classInstance};
classJSON.name // ok
classJSON.dob // ok
classJSON.age // missing
这很好,但是我有时需要使用 classJSON 的类型。我想提取它的唯一方法是这样做:
var classJSON = {...new Foo('', 0)}
type ClassJSONType = typeof classJSON;
有没有办法直接从Foo 中提取类型而不需要 Javascript 实例化?
【问题讨论】:
-
“第二类”是什么意思?类实例的形状?如果是这样,那就是
Foo -
更新更清晰。
-
this 有帮助吗?
-
我觉得我的问题可以帮助回答那个问题,但标签是 ts2.0... 从那时起发生了很多变化
-
@lonewarrior556 上面链接的答案提供了正确的解决方案。它在 ts3.x 中仍然有效。