javascript - 必须定义不能识别值的打字稿类型推断
问题描述
这在打字稿中可能是不可能的,但似乎 TS 编译器应该能够以某种方式解决这个问题。这里的例子
function validateFoo(val: string | undefined) {
return val !== undefined ? true : false
}
let myVal: string | undefined
if (validateFoo(myVal)) {
console.log("output: ", myVal.toLowerCase()) // Error: Object is possibly 'undefined'.
}
似乎在if
声明中 myVal不能未定义。然而打字稿说它可能是。是否有某种方法可以注释该功能,可能类似于:
if (!myVal) {
throw new Error("myVal undefined")
}
console.log(myVal.toLowerCase())
将在投掷后标记myVal
为定义。
解决方案
这就是类型守卫所做的:
function validateFoo(val: string | undefined): val is string {
https://www.typescriptlang.org/docs/handbook/advanced-types.html#user-defined-type-guards
推荐阅读
- python - 如何根据条件将 csv 拆分为 2 个数据框
- git - 在 gitlab 中是否可以在不记录的情况下推送更新提交?
- java - 在 tools.jar 中哪里可以找到 Treemaker 相关文档
- sql - Laravel 5.6.9 - 数据库计数给出不同的输出
- python - 如何让这段代码更高效(KS测试)
- html - 如何将动态值放入来自 React 中 JSON 文件的 HTML 字符串中?
- mysql - SQL CONSTRAINT UNIQUE 无法插入更多数据
- java - 在一行中记录多件事而不是记录多行有什么好处?
- bash - 在两个字符之间切换
- python - 无法在指数平滑中指定初始化方法