typescript - 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,但我绝不是专家!
谢谢!
解决方案
使用类型谓词向 TS 指示该函数检查是否fact
属于 type test-2
。
function isTest2(fact: factType): fact is 'test-2' {
return fact === 'test-2';
}
推荐阅读
- kendo-ui - 将事件绑定到 Kendo 下拉列表时未捕获的类型错误
- java - Spring Service 名称与接口名称冲突
- ruby-on-rails - 如何解决哈希文字中的重复键
- java-ee-7 - 在 Java SE 中嵌入 Payara
- r - 在R中按组计算用户定义的函数输出
- jenkins - 在 Jenkins 管道的并行阶段设置依赖关系或优先级
- python - 针对多个后端运行 pytest 测试?
- c# - 插入重复值linq
- javascript - 将静态文本复制到剪贴板?
- installation - 在 appium-chromedriver@4.0.0 安装脚本失败