使用Typescript 2.2.2(使用strictNullChecks
選項爲true)我對以下內容感到驚訝。這是一個錯誤還是有意的行爲?使用上下文類型而不是從推論輸入函數返回
interface Fn {
(value: any): number;
}
var example1: Fn = function(value) {
if (value === -1) {
return undefined; // no error, was expecting error
}
return value;
};
var example2 = function(value: any): number {
if (value === -1) {
return undefined; // errors correctly
}
return value;
};
我明白example1
不示數爲函數的返回類型推斷爲any | undefined
。然後將any | undefined
與Fn
返回類型的上下文類型進行比較,即number
,因此發現它們是兼容的。相反,我希望返回類型的功能由上下文輸入設置,而不是與其相比。有沒有什麼辦法可以強制使用Fn
這個消費者也明確地鍵入函數return?
我想這回到接口只提供必須履行合同,而不是指定實現包括返回類型。
而且(出於興趣)的錯誤顯然被抓住時,參數類型(number
)引起的推斷返回類型(number | undefined
)要與上下文類型不兼容(從Fn2
,即number
):
interface Fn2 {
(value: number): number;
}
// `example3` errors as function return type is inferred to be `number | undefined` which is incompatible with the expected `number` return type.
var example3: Fn2 = function(value) {
if (value === -1) {
return undefined;
}
return value;
};