为什么我必须在构造函数中使用 NaN 而不能使用 null?打字稿

Why do I have to use NaN in a constructor and can't use null? typescript

我在我的 Angular 项目中使用 GoJS 库。

当我想从gojs中return一个new Size()只有一个参数时,另一个必须是NaN:

我正在做类似 new Size(NaN, height)

的事情

Size() 的构造函数如下所示:constructor(w?: number, h?: number);

为什么我不能使用 null 而不是 NaN

使用 null 浏览器时 returns Error: Invalid arguments to Size constructor: null, 200

我没有要解决的问题,我只是不明白为什么它不能与 null

一起使用

原因是 NaN 的类型为 number,其中 null 的类型为 null。您不能在需要 number 的地方传递 null。如果此构造函数的类型为 constructor(w?: number | null, h?: number | null),则您可以这样做,然后将其用作 new Size(null, null) 类型正确。

let a: number = NaN; // NaN is number
a = null; // error as null is not number

let b: number | null = NaN; // fine as before
b = null; // also fine as null is explicitly define in the type 

另外 Error: Invalid arguments to Size constructor: null, 200 是运行时错误,这意味着构造函数代码内部可能正在检查参数类型 typeof 并且如果任何参数不是数字则引发此异常。