首页 > 解决方案 > 必须定义不能识别值的打字稿类型推断

问题描述

这在打字稿中可能是不可能的,但似乎 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为定义。

标签: javascripttypescripttypescript-typings

解决方案


这就是类型守卫所做的:

function validateFoo(val: string | undefined): val is string {

https://www.typescriptlang.org/docs/handbook/advanced-types.html#user-defined-type-guards


推荐阅读