我一直在学习打字稿语言,需要一些解释。问题在于,由于this.value
函数对其进行了检查,因此从未将名为isValid
的变量分配为未定义。如何使打字稿理解它?
export const isValid = (n: any) => n && n > 0 && n < 10;
class Test {
value: number;
constructor(value?: number) {
/*
Type 'number | undefined' is not assignable to type 'number'.
Type 'undefined' is not assignable to type 'number'.ts(2322)
*/
this.value = isValid(value) ? value : -1;
}
}
答案 0 :(得分:2)
默认情况下,类型检查器不会查看被调用函数的实现,而只会查看它们的签名。因此,构造函数的类型检查器不知道isValid
仅在数字n
时返回true。
您可以将isValid
的代码内联到构造函数中:
constructor(value) {
this.value = value && value > 0 && value < 10 ? value : -1;
}
或用user defined type guard扩展isValid
的功能签名:
export function isValid(n: any): n is number {
return n && n > 0 && n < 10;
}
答案 1 :(得分:0)
因为构造函数中的value
是可选的。其类型为number | undefined
,则在分配时需要将其转换为数字:
this.value = isValid(value) ? value as number : -1 ;