Javascript 类型';未定义';不可分配给类型';编号'。ts(2322)
我一直在学习打字语言,需要一些解释。问题是名为Javascript 类型';未定义';不可分配给类型';编号'。ts(2322),javascript,typescript,Javascript,Typescript,我一直在学习打字语言,需要一些解释。问题是名为this.value的变量从未被指定为未定义变量,因为isValid函数检查它。如何让typescript理解它 export const isValid = (n: any) => n && n > 0 && n < 10; class Test { value: number; constructor(value?: number) { /* Ty
this.value
的变量从未被指定为未定义变量,因为isValid
函数检查它。如何让typescript理解它
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;
}
}
export const isValid=(n:any)=>n&&n>0&&n<10;
课堂测试{
值:数字;
构造函数(值?:编号){
/*
类型“number | undefined”不可分配给类型“number”。
类型“未定义”不可分配给类型“编号”。ts(2322)
*/
this.value=isValid(value)?值:-1;
}
}
因为构造函数中的值是可选的。其类型为number |未定义
,分配时需要将其转换为number:
this.value = isValid(value) ? value as number : -1 ;
默认情况下,类型检查器不查看被调用函数的实现,只查看它们的签名。因此,构造函数的类型检查器不知道isValid
仅当n
是一个数字时才会返回true
您可以将isValid
的代码内联到构造函数中:
constructor(value) {
this.value = value && value > 0 && value < 10 ? value : -1;
}
是的,我可以,但是看起来不安全。如果我将来更改IsValid函数表达式并忘记将其作为数字删除,该怎么办。。还有其他解决方法吗?as number
用于值,而不是isValid(值)
。这样做的一个方法是将值
作为可选项删除。这就是我要寻找的。非常感谢。
export function isValid(n: any): n is number {
return n && n > 0 && n < 10;
}