有没有办法创建默认的接口对象?
例:
interface myInterface {
A: string;
B: string;
C: number;
D: CustomType; // A custom class
}
Run Code Online (Sandbox Code Playgroud)
通常,您可以通过以下方式创建此接口的对象:
var myObj: myInterface = {
A: "",
B: "",
C: 0,
D: null
}
Run Code Online (Sandbox Code Playgroud)
然而,如果有一些语法糖就像这样做会很好:
var myObj = new myInterface;
// OR
var myObj = default(myInterface);
Run Code Online (Sandbox Code Playgroud)
根据我的研究,我没有找到办法做到这一点; 但我希望我错过了一些东西.
Mat*_*cic 14
您可以使用稍微不同的语法并获取所有类型检查和IntelliSense.
interface IUserModel{
Name: string;
Age: number;
Email: string;
IsActive: boolean;
}
var user = <IUserModel>{};
Run Code Online (Sandbox Code Playgroud)
您创建一个空的用户对象,但TypeScript编译器仍在检查您是否在该对象上有有效的属性,它仍然提供代码完成.
不,那里没有。
接口声明仅存在于编译时,因此唯一执行此类操作的时间是在编译时。不幸的是,编译器没有提供任何语言构造来执行此操作,也没有提供任何扩展编译过程的方法。
解决这个问题的一种方法是进行一些代码生成;添加一个函数来创建具有正确结构的对象。这种方法的问题在于,您要么必须解析 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>
Run Code Online (Sandbox Code Playgroud)
并生成如下内容:
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)
};
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8570 次 |
最近记录: |