打字稿能否根据条件表达式和常量来推断类型?

时间:2019-10-17 12:24:00

标签: typescript

我很好奇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代码时,可以使编译器仅删除不可达的代码并然后运行类型评估?

1 个答案:

答案 0 :(得分:-1)

在编译时(即TypeScript评估返回类型时),if条件不会显式为false。因为将评估if条件的表达式是在运行时而不是在编译时确定的,所以我们不应该期望TypeScript假设getValue函数将永远不会返回字符串类型。