在Typescript 2.5.2中,以下方法不起作用:
interface I {
m?():void;
}
class C implements I {
}
let c = new C();
c.m(); <== Error : TS2339:Property 'm' does not exist on type 'C'.
为什么找不到m
方法?
如果我添加:
interface C extends I {}
没关系!或者,如果我添加:
let c = new C() as C & I;
也没关系。
据我所知,implements
应将C
和I
类型合并为C&amp;一世。
这是一个问题吗?
答案 0 :(得分:2)
您拥有的接口是一种弱类型,不会对实施者强制执行属性m
。
TypeScript足够智能,可以看到m
绝对不在您的类上,但您可以通过要求TypeScript将变量视为接口来阻止错误:
let c: I = new C();
c.m();
尽管有这个技巧,你仍然会遇到运行时问题,TypeScript试图警告你。