Angular TypeScript中类作接口与方法参数类型的技术疑问
关于Angular TypeScript中类作为接口使用的疑问解答
嘿,我来帮你把这几个点掰扯清楚:
首先明确:
Obj: MyClass绝对不是Obj = new MyClass()的简写Obj: MyClass是TypeScript的类型标注,它的作用是告诉TypeScript:传入这个方法的Obj参数,必须符合MyClass的类型结构(或者就是MyClass的实例)。它完全不负责创建MyClass的实例,只是做类型校验用的。而Obj = new MyClass()是实际创建MyClass实例的代码,二者完全不是一回事。如果
MyClass构造函数需要参数,创建实例确实要写new MyClass(argument)
比如你的MyClass是这样的:class MyClass { constructor(public name: string) {} }那你必须通过
const myInstance = new MyClass("Alice")来创建合法的实例,这时候把myInstance传给Method,Obj: MyClass的类型标注完全能正常生效——因为myInstance确实是MyClass的实例,符合类型要求。额外补充:TypeScript的结构类型特性
因为TS是结构类型系统,就算你不是用new MyClass()创建的对象,只要这个对象的结构和MyClass完全一致(比如有相同的属性、方法),也能通过Obj: MyClass的类型检查。比如:const fakeObj = { name: "Bob" }; Method(fakeObj); // 这里也能通过TS类型检查,因为结构匹配但如果
MyClass里有private或者protected成员,那只有真正的MyClass实例才能通过校验,这种情况下结构匹配的“假对象”会被TS报错。
内容的提问来源于stack exchange,提问作者poimsm
相关产品推荐
相关产品推荐

