首页 > 解决方案 > 类型 [未定义,未定义] | [number, number] 不可分配给类型 [number, number]

问题描述

这都是使用 TypeScript。

我有一个来自外部库的名为“extent”的函数,它返回 [number, number] 或 [undefined, undefined],因此我无法更改此函数本身。

我有一个名为“getMaxRange”的函数,它接受一个数字数组,并返回一个长度为 2 的数组,每个数组都包含一个数字,例如:[number, number]

如果我输入类似

getMaxRange = (points: number[]) : [number, number] => {
    const range = extent(points));
    if (range == [undefined, undefined]) {
        return [0,1];
    }
    else{
        return range;
    }

}

它给出了一个错误Type [undefined, undefined] | [number, number] is not assignable to type [number, number]

最好的方法是什么,这样我就不会收到这个错误?我怎样才能知道范围不再是 [undefined, undefined] 了?

标签: javascripttypescript

解决方案


if (range == [undefined, undefined])总是false。使用==or===比较数组检查它们是否是同一个数组,而不是它们是否具有相同的内容。

您需要检查数组元素:

if (range[0] === undefined && range[1] === undefined)

游乐场链接

实际上,给定类型,只需检查一个元素就足够了:

if (range[0] === undefined)

游乐场链接

在运行时方面,这也可以:

if (range.includes(undefined))

但是由于 TypeScript 无法识别防护,因此您必须使用断言显式标记它,因此使用第一个版本可能更好。


推荐阅读