Typescript 这种构造“[System.iterator]():iterator;”的名称是什么界面内部
本文显示了以下TS定义:Typescript 这种构造“[System.iterator]():iterator;”的名称是什么界面内部,typescript,Typescript,本文显示了以下TS定义: interface Iterable { [Symbol.iterator]() : Iterator; } 我好像找不到那样的东西。可转位类型似乎不适合。那么这个结构是什么呢 我的问题不是关于迭代器,而是关于这个特殊的结构[Symbol.iterator]():迭代器,如一般形式[type]():type这些被称为迭代器,实际上它是符号。迭代器,而不是系统。迭代器。该结构意味着实现类必须是iterable(即可以使用for..of),并且iterabl
interface Iterable {
[Symbol.iterator]() : Iterator;
}
我好像找不到那样的东西。可转位类型似乎不适合。那么这个结构是什么呢
我的问题不是关于迭代器,而是关于这个特殊的结构
[Symbol.iterator]():迭代器代码>,如一般形式[type]():type
这些被称为迭代器,实际上它是符号。迭代器
,而不是系统。迭代器
。该结构意味着实现类必须是iterable(即可以使用for..of
),并且iterable必须公开一个强制性的next
方法:
interface IterableTest {
[Symbol.iterator](): Iterator<string>;
}
class MyClass implements IterableTest {
private count: number = 0;
public [Symbol.iterator](): Iterator<string> {
return this;
}
public next(): IteratorResult<string> {
this.count = this.count + 1;
if (this.count > 5) {
return {
done: true,
value: `Value ${this.count}`
};
}
else {
return {
done: false,
value: `Value ${this.count}`
};
}
}
}
var test = new MyClass();
declare var console: any;
for (let x of test) {
console.log(x);
}
符号上的TS文档:
下面的文章深入解释了迭代器:
MDN关于迭代器的文章:谢谢,但我的问题不是关于迭代器,而是关于这个特殊的结构[Symbol.iterator]():迭代器
,如一般形式[type]():type
这只是定义成员的另一种方式。您可以执行接口测试{[“SomeMethod”]():string;}
。与JS中的obj.prop
或obj[“prop”]
类似。还要注意的是,Symbol.iterator只是一个字符串,而不是一些复杂的类型-实际上是typeof Symbol。iterator
生成Symbol
更新了答案<代码>符号
类似于字符串,可以用作对象键。
interface Test {
["SomeMethod"](): string;
}
class TestClass implements Test {
["SomeMethod"]() {
return "hello";
}
}