0

我正在[number, object]从生成器函数中生成一个具有类型值的数组,并通过循环遍历该函数for...of。使用 is 类型解构值for (const [k, v] of iterator())时。我希望它具有与我在生成器函数中使用的类型相同的类型。vnumber | objectobjectyield

我在这里创建了我在打字稿 REPL 中遇到的问题的演示

问题出在第 22 行,打字稿编译器抱怨访问解构后可能不存在的键。

为什么打字稿认为解构的变量可能是任何一种类型?

4

1 回答 1

3

这不是发电机问题。数组字面量通常扩展到数组类型。如果您使用as const断言来保留元组类型,它会按预期工作

(function iterate() {
    function* iterator() {
        let id: number = 0;
        const value: {
            a: number,
            b: number
        } = {
            a: 1,
            b: 2
        };
        while (id < 10) {
            yield [
                id,
                value
            ] as const;

            id += 1;
        }
    }

    for (const [k, v] of iterator()) {
        console.log(k, v.a);
    }
})();

于 2019-07-24T08:09:07.433 回答