更新: 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)
}
答案 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
,您可以断言它是虚假的,然后将其翻转为实质上是断言其“真实性”。