Typescript编译器不检查方法的有效性'返回类型

时间:2016-12-01 14:46:23

标签: javascript typescript

这是我的问题: 我有一个实现接口的类。方法greet应该有返回类型void但是在我实现的类中它有string并且编译器没有警告我。和IDE都没有(我使用的是PhpStorm)。 我错过了什么或是故意的吗?

interface Person {
    sex: string;
    greet() : void;
}

class Boy implements Person {
    sex: 'M';
    greet() {
        return this.sex;
    }
}

我使用的是Typescript 2.0.10

1 个答案:

答案 0 :(得分:2)

它不会抱怨,因为它并不重要。
您的接口声明该方法返回void,如果您的实现返回值,则不会发生任何伤害 例如:

let person: Person = new Boy();
person.greet();

由于person的类型为Person(而不是Boy),因此greet方法不会返回值,事实上我并不是想使用返回值。

另一方面,如果恰恰相反:

interface Person {
    sex: string;
    greet(): string;
}

class Boy implements Person {
    sex: 'M';
    greet(): void {}
}

然后抛出错误:

  

Class'Boy'错误地实现了界面'Person'   财产'问候'的类型是不相容的   输入'()=> void'不能分配给'()=>类型字符串”。
  类型'void'不能分配给'string'类型。