在我的一个模块中,我使用一个可选的元组作为函数结果:
function ruleFromPosition(position): [string, number] | undefined;
并将其分配给我的单元测试中的本地变量:
let [ruleName, ruleIndex] = ruleFromPosition(position);
这会导致错误:
类型必须有' Symbol.iterator'返回迭代器的方法。
我可以将此声明改写为:
let [ruleName, ruleIndex] = ruleFromPosition(position)!;
,编译,但不允许可空的检查。使用元组的正确方法是什么?
答案 0 :(得分:3)
这不是TypeScript“问题”。你无法解构 undefined :
let [a, b,] = undefined;
BOOM:未捕获的TypeError:无法读取未定义的属性'Symbol(Symbol.iterator)'
由于您的函数具有返回 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);