类型'undefined'不能分配给类型'number'.ts(2322)

时间:2020-10-28 04:55:24

标签: javascript typescript

我一直在学习打字稿语言,需要一些解释。问题在于,由于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;
    }
}

2 个答案:

答案 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 ;