いいえ、ありません。
インターフェイス宣言はコンパイル時にのみ存在するため、そのようなことを行うのはコンパイル時だけです。残念ながら、コンパイラはこれを行うための言語構造も、コンパイル プロセスを拡張する方法も提供していません。
この問題を回避する 1 つの方法は、コード生成を行うことです。正しい構造のオブジェクトを作成する関数を追加します。このアプローチの問題は、TypeScript コードまたはドメイン固有言語を解析する必要があることです。
このようなものを読んでください:
<Definitions>
<Interface Name="myInterface">
<Member name="A" type="string"/>
<Member name="B" type="string"/>
<Member name="C" type="number"/>
<Member name="D" type="CustomType"/>
</Interface>
</Definitions>
そして、次のようなものを生成します:
interface myInterface {
A: string;
B: string;
C: number;
D: CustomType;
}
function InitMyInterface(obj?: any): myInterface {
if (obj === undefined) obj = {};
return {
A: obj.A === undefined ? "" : obj.A,
B: obj.B === undefined ? "" : obj.B,
C: obj.C === undefined ? 0 : obj.C,
D: obj.D === undefined ? null : obj.D, // or InitCustomType(obj.D)
};
}