【发布时间】:2020-02-22 09:20:43
【问题描述】:
在 TypeScript (3.6.3) 中,Generator 几乎与 IterableIterator 相同。当 Generator 扩展 Iterator 时,它默认第三个泛型参数 (TNext) 为 unknown。 Iterator 本身默认 TNext 为 undefined。所以 Generator 和 Iterator(以及 IterableIterator)并没有像他们应该的那样排列。
let gen2:IterableIterator<string>;
function* gen1():Generator<string> {
yield* gen2;
}
yield* 行是一个错误:“无法将迭代委托给 value,因为其迭代器的 'next' 方法需要类型 'undefined',但包含的生成器将始终发送 'unknown'.ts(2766)”。
我错过了什么吗?这样做有充分的理由吗?
【问题讨论】:
-
如果 TypeScript github 问题中的某处埋藏了一个线程来解释这种差异,我不会感到惊讶。我自己也不知道原因,但我想指出,如果你删除
: Generator<string>并让 TypeScript 自己推断返回类型,它就是Generator<string, void, undefined>。
标签: typescript iterator generator