Typescript:类实现接口的问题?
在 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 & I。这有问题吗?
答案#1
你拥有的接口是一个弱类型,它不会在实现者上强制要求属性m。
TypeScript 足够聪明,可以看出 m 肯定不在你的类上,但你可以通过要求 TypeScript 将该变量视为接口来防止错误:
let c: I = new C();
c.m();
尽管有这个技巧,你仍然会遇到运行时问题,TypeScript 曾试图提醒你这一点。
