不,那里没有。
接口声明仅在编译时存在,因此唯一要做类似事情的时间是在编译时。不幸的是,编译器没有提供任何语言结构来做到这一点,也没有任何方法来扩展编译过程。
解决这个问题的一种方法是进行一些代码生成;添加一个创建具有正确结构的对象的函数。这种方法的问题在于,您要么必须解析 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)
};
}