Typescript:类实现接口问题?

时间:2017-09-28 18:46:18

标签: 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应将CI类型合并为C&amp;一世。 这是一个问题吗?

1 个答案:

答案 0 :(得分:2)

您拥有的接口是一种弱类型,不会对实施者强制执行属性m

TypeScript足够智能,可以看到m绝对不在您的类上,但您可以通过要求TypeScript将变量视为接口来阻止错误:

let c: I = new C();
c.m();

尽管有这个技巧,你仍然会遇到运行时问题,TypeScript试图警告你。

相关问题