Предположим, у меня есть этот пример класса, но на самом деле у него гораздо больше свойств
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
tsplayground
Это здорово, однако мне иногда нужно использовать тип classJSON
.. Единственный способ, которым я могу подумать, чтобы извлечь его, это сделать это:
var classJSON = {...new Foo('', 0)}
type ClassJSONType = typeof classJSON;
Есть ли способ извлечь тип прямо из Foo
без необходимости Javascript для создания экземпляра?