2016-12-01 14 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

感謝您的回答。 –

相關問題