文字列値としてクラス名を含むオブジェクトのシリアル化された表現の型を作成しようとしています。
基本的に私はこのようなものを作ろうとしています:
interface Serialised<T> {
className: nameof T; // error
value: T;
}
もちろんnameof
、TypeScriptにはありません。そのため、現在、基本的な型の説明を使用しており、後で型キャストを使用しています。
interface Serialised {
className: string;
value: object;
}
したがって、質問があります。具体的には、そのうちの3つです。
typescriptでクラスの名前を抽出する機能はありません。
私たちができる最善のことは、serailizableクラスに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'.
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加