2016-12-01 10 views
1

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

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

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

我使用打字稿2.0.10

+0

[TypeScript playground](http://www.typescriptlang.org/play/index.html)也不会做出警告或错误。但是,如果你把'void'改成'number'(说'greet'不正确,因为它返回一个字符串),它*会抱怨它。所以它与'void'有关。 –

回答

2

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

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

由于personPerson类型(而不是Boy),那么greet方法将不会返回一个值,而事实上我并不想用一个返回值。

在另一方面,如果它是相反的:

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

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

然后引发错误:

类“男孩”不正确地实现了接口“人”。
属性'问候'的类型是不兼容的。
类型'()=> void'不可分配给类型'()=> string'。
类型'void'不能分配给'string'类型。

+0

感谢您的回答。 –

相关问题