繁体   English   中英

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

[英]Type 'undefined' is not assignable to type 'number' .ts(2322)

我一直在学习 Typescript 语言,需要一些解释。 问题是命名为this.value变量从未被分配为 undefined 由于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;
    }
}

因为构造函数中的value是可选的。 它的类型是number | undefined number | undefined ,您需要在分配时将其转换为数字:

 this.value = isValid(value) ? value as number : -1 ;

默认情况下,类型检查器不查看被调用函数的实现,只查看它们的签名。 因此,构造函数的类型检查器不知道isValid只会在n是数字时返回 true。

您可以将isValid的代码内联到构造函数中:

constructor(value) {
  this.value = value && value > 0 && value < 10 ? value : -1;
}

或使用用户定义的类型保护扩展isValid的函数签名:

export function isValid(n: any): n is number {
  return n && n > 0 && n < 10;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM