- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 TypeScript (3.6.3) 中,Generator<> 几乎与 IterableIterator<> 相同。当 Generator<> 扩展 Iterator<> 时,它默认第三个通用参数 (TNext) 为未知。 Iterator<> 本身默认 TNext 为未定义。所以生成器和迭代器(和 IterableIterator)并没有像它们应该的那样排列。
let gen2:IterableIterator<string>;
function* gen1():Generator<string> {
yield* gen2;
}
最佳答案
这实际上是一个非常复杂的问题。我并不假装完全理解它。但也许我可以提供一些见解。
他们为什么要添加它们?
(在 this commit 中)。
Typescript 决定,无论好坏,它都希望对生成器进行更严格的类型检查。这实际上有一些正当的理由。举个例子
function* foo() {
let m = 0;
while (m < 10) {
yield m++;
}
return "done";
}
let gen = foo(),
curr;
while(!(curr = gen.next()).done) {}
// At his point we should know that
// curr.value is a string because curr.done is true
在这里我们可以看到问题——我们不知道一个值是否按照我们应该的所有逻辑规则返回或产生。所以他们介绍了TReturn。 TNext 是
introduced到:
[…] correctly check, and provide a type for, the result of a
yield
expression based on the next type of the generator's return type annotation (i.e. theTNext
type in theGenerator
definition above).
next()
的使用存在惯用差异。生成器和非生成器迭代器中的函数。作为
ECMA-262 remarks对于迭代器。
Arguments may be passed to the
next
function but their interpretation and validity is dependent upon the target Iterator. The for-of statement and other common users of Iterators do not pass any arguments, so Iterator objects that expect to be used in such a manner must be prepared to deal with being called with no arguments.
TNext
的唯一明智选择将是
undefined
.制作
unknown
将是类型检查的一大障碍(更不用说用
--strictNullChecks
编译的代码)。
next()
,那就太好了。带有生成器的函数并不是很常见的做法——它实际上有一个有效的用例……并且在
the standard 中定义了行为:
Generator.prototype.next(value)
The
next
method performs the following steps:
- Let g be the this value.
- Return ?GeneratorResume(g, value, empty).
The value to send to the generator.
The value will be assigned as a result of a
yield
expression. For example, invariable = yield expression
, the value passed to the.next()
function will be assigned tovariable
.
.next()
call 将在没有参数的情况下被调用,后续的将被调用。不幸的是,没有办法指定“第一次可选,后续时间未知”类型,所以我想鉴于这一切,他们选择了
unknown
对于
TNext
在发电机中。
关于typescript - 为什么 TypeScript 的 IterableIterator<> 和 Generator<> 泛型略有不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58568399/
我的 typescript 代码有问题通过 tsc 编译后,出现类似 cannot find some names 的错误。 app.ts(1,22): error TS2304: Cannot fi
当我实现接口(interface)数组时,那里有返回 IterableIterator 的方法。IterableIterator 从 Iterator 扩展而来,我可以很好地理解并且对我来说很有意义。
我正在使用 ionic 4 来构建一个应用程序。而我的应用程序在浏览器上运行良好,但是当我构建 android 平台时,它给了我这一行的错误 for (let [index, p] of this.c
在 TypeScript (3.6.3) 中,Generator<> 几乎与 IterableIterator<> 相同。当 Generator<> 扩展 Iterator<> 时,它默认第三个通用参
当我尝试迭代从 Map.values() 返回的值时,Typescript 给了我这个错误(其中 Map 的类型为 ): error TS2495: Type 'IterableIterator' i
当我使用 yield* expression在 TypeScript 上,它总是会出错。 Type 'IterableIterator' is not an array type. 如何在不使用 an
我正在尝试使用此 Slider 进行改进,但在此 Next.js 项目中使用 TypeScript React 时出现以下错误: “类型‘IterableIterator’只能在使用‘--downle
我是一名优秀的程序员,十分优秀!