如何检查变量是否是 TypeScript 中的元组

aba*_*haw 2 typescript

我想看看传递给函数的变量(可以是数字数组或元组数组)是否是元组数组。

function (times: Array<number> | Array<[number, number]>) {
    if (times[0] instanceof [number, number]) {
        console.log("Its the tuple one!");
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码不起作用,我也尝试过,if (times[0] instanceof tuple))但这也不起作用。如何才能做到这一点?

谢谢!

Nit*_*mer 7

根据基本类型>元组文档:

元组类型允许您表达一个数组,其中固定数量元素的类型已知,但不必相同。

这意味着元组只是数组。
另外,由于 Typescript 编译为 javascript,而 javascript 没有元组,因此在运行时检查类型意味着您需要检查 javascript 类型,而不是运行时不存在的 ts 类型。

回答你的问题:

function fn(times: Array<number> | Array<[number, number]>) {
    if (times[0] instanceof Array) {
        console.log("Its the tuple one!");
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 跨帧检查数组时,“instanceof Array”失败。更喜欢“Array.isArray”:https://twitter.com/mgechev/status/1292709820873748480 (3认同)