【发布时间】:2017-05-03 07:49:42
【问题描述】:
使用 Typescript 2.2.2(使用 strictNullChecks 选项为真)我对以下内容感到惊讶。这是错误还是预期行为?
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 的消费者也明确键入函数返回?
我想这又回到了只提供必须履行的合同的接口,而不是规定包括返回类型在内的实现。
另外(出于兴趣)当参数类型(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;
};
【问题讨论】:
标签: typescript