我正在尝试为对象的某些序列化表示形式创建一个类型,该类型包括类名作为字符串值。
基本上,我正在尝试这样的事情:
interface Serialised<T> {
className: nameof T; // error
value: T;
}
现在,TypeScript中当然没有nameof
。所以,目前我正在使用基本的类型描述,然后再使用一些类型转换:
interface Serialised {
className: string;
value: object;
}
所以这里有一个问题,或者更确切地说是其中的3个:
答案 0 :(得分:0)
无法提取打字稿中的类名称。
我们能做的最好的事情就是要求任何可序列化的类都具有一个名为className
(或其他名称)的静态字段,我们可以使用类型查询来提取该静态字段:
interface SerializableClass {
new (...a:any[]): any;
readonly className: string;
}
interface Serialised<T extends SerializableClass> {
className: T['className']; // error
value: InstanceType<T>;
}
class Ok {
static readonly className = "Ok"
}
let o: Serialised<typeof Ok> = {
className: "Ok",
value: new Ok()
}
let o2: Serialised<typeof Ok> = {
className: "Okk", //err
value: new Ok()
}
class Bad{}
let o3: Serialised<typeof Bad> //err Type 'typeof Bad' does not satisfy the constraint 'SerializableClass'.