Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 类型';未定义';不可分配给类型';编号'。ts(2322)_Javascript_Typescript - Fatal编程技术网

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;
}