首页 > 解决方案 > IF 语句中的详尽类型检查

问题描述

我阅读了详尽的类型检查,这确实是 typescript 的一个很棒的功能。我对它进行了试验,并遇到了一些奇怪的行为(或者打字稿团队没有完全实现)。这是我现在拥有的代码(效果很好):

type factType = 'test-1' | 'test-2'

function doSomething(fact: factType) {
    if (fact ==='test-1') {
        return true;
    } else if(fact === 'test-2') {
        return true;
    }

    assertUnreachable(fact);
}

function assertUnreachable(x: never): never {
    throw new Error("Didn't expect to get here");
}

但是当我使用函数作为分支条件时,它会中断。它说“'string'类型的参数不可分配给'never'类型的参数事实:“test-2””:

type factType = 'test-1' | 'test-2';

function doSomething(fact: factType) {
    if (fact === 'test-1') {
        return true;
    } else if (isTest2(fact)) {
        return true;
    }

    assertUnreachable(fact);
}

function isTest2(fact: factType) {
    return fact === 'test-2';
}

我尝试使用fact as 'test-2'但它不起作用。有谁知道如何解决这个问题或可能是什么原因?我认为是 Typescript,但我绝不是专家!

谢谢!

标签: typescript

解决方案


使用类型谓词向 TS 指示该函数检查是否fact属于 type test-2

function isTest2(fact: factType): fact is 'test-2' {
    return fact === 'test-2';
}

推荐阅读