为什么TypeScript错误地推断返回类型?

时间:2019-03-31 17:10:08

标签: typescript

更新 TypeScript消息正确,该函数的返回类型可以是空字符串。

下面的代码段无法在带有strictNullCheck选项的TypeScript中编译。

代码是正确的,但是TS错误地推断出此(id) => id && /^[a-z0-9\-]+$/.test(id)表达式可以在其他值中返回空字符串''并抱怨。

type Validators<D> = { 
  [K in keyof D]: (value: D[K] | undefined) => true | false | undefined
}

interface Post {
    id?: string
}

const validators: Validators<Post> = {
    // Complains about this line
    id: (id) => id && /^[a-z0-9\-]+$/.test(id) 
}

Playground

1 个答案:

答案 0 :(得分:2)

我前一段时间学会的断言非空值的一个小技巧是做一个双!!

type Validators<D> = { 
  [K in keyof D]: (value: D[K] | undefined) => true | false | undefined
}

interface Post {
    id?: string
}

const validators: Validators<Post> = {
    id: (id) => !!id && /^[a-z0-9\-]+$/.test(id)
}

此代码没有抱怨,但是不确定的是id变量。通过执行!!id,您可以断言它是虚假的,然后将其翻转为实质上是断言其“真实性”。