类型[undefined,undefined] | [号码,号码]不可分配给[号码,号码]类型

时间:2020-10-11 07:25:57

标签: javascript typescript

这都是使用TypeScript。

我从外部库中获得了一个名为“范围”的函数,该函数返回[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]?

2 个答案:

答案 0 :(得分:1)

if (range == [undefined, undefined])始终为false。使用=====比较数组会检查它们是否是相同数组,而不是内容是否相同。

您需要检查数组元素:

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

Playground link

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

if (range[0] === undefined)

Playground link

在运行时方面,这也将起作用:

if (range.includes(undefined))

但是TypeScript无法识别防护,因此您必须使用断言明确标记它,因此最好使用第一个版本。

答案 1 :(得分:0)

您可以检查数组元素

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

}