我很好奇Typescript为确定函数的类型而在考虑可能的执行路径时投入了多少“努力”(因为缺乏更好的用语)。
例如,考虑以下代码:
function getValue() {
if (false) {
return 'never this string';
}
return 42;
}
由于false
永远不会true
,因此永远不会返回“永远不会返回此字符串”,因此该函数-似乎应该具有“数字”类型。
但是,当我在功能定义中添加类型注释(“:number”)时
// test.ts
function getValue(): number {
if (false) {
return 'never this string';
}
return 42;
}
并编译(tsc test.ts
),出现此错误:
test.ts:3:9 - error TS2322: Type '"never this string"' is not assignable to type 'number'.
所以我的问题是:
是否有可能使Typescript认为'number'是getValue
的正确返回类型? (并且,相关的,因此可能使编译器不抱怨不能将字符串分配给数字吗?)可能也相关:在编译TS代码时,可以使编译器仅删除不可达的代码并然后运行类型评估?
答案 0 :(得分:-1)
在编译时(即TypeScript评估返回类型时),if条件不会显式为false。因为将评估if条件的表达式是在运行时而不是在编译时确定的,所以我们不应该期望TypeScript假设getValue
函数将永远不会返回字符串类型。