在Typescript中使用可选元组作为函数结果时出错

时间:2017-08-06 09:41:44

标签: typescript

在我的一个模块中,我使用一个可选的元组作为函数结果:

function ruleFromPosition(position): [string, number] | undefined;

并将其分配给我的单元测试中的本地变量:

let [ruleName, ruleIndex] = ruleFromPosition(position);

这会导致错误:

  

类型必须有' Symbol.iterator'返回迭代器的方法。

我可以将此声明改写为:

let [ruleName, ruleIndex] = ruleFromPosition(position)!;

,编译,但不允许可空的检查。使用元组的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

这不是TypeScript“问题”。你无法解构 undefined

let [a, b,] = undefined;
  

BOOM:未捕获的TypeError:无法读取未定义的属性'Symbol(Symbol.iterator)'

(见exploringjs, destructuring

由于您的函数具有返回 undefined 的可能性,因此TypeScript将无法编译。你可以:

检查返回值

function ruleFromPosition(position): [string, number] | undefined {
    if (position > 1) return undefined;

    return ['1', 0];
}

const result = ruleFromPosition(1);

if (result) {
  let [ruleName, ruleIndex] = result;
}

返回可破坏的数组

function ruleFromPosition(position): [string | undefined, number | undefined] {
    if (position > 1) return [undefined, undefined];

    return ['1', 0];
}

let [ruleName, ruleIndex] = ruleFromPosition(0);