我试图了解这是否可能......
export interface ISomething { ... }
export interface ISomethingElse implements Iterator<ISomething> { ... doSomeJob(): void; ... }
我的想法是,当我宣布我的课时,ClassA我可以做这样的事情......
export ClassA implements ISomethingElse {
public doSomeJob(): void {
for (let item of this) {
console.log(item);
}
}
}
我希望在C#
中实现与此声明相似的内容public interface ISomethingElse : IEnumerable<ISomething> {
void DoSomeJob();
}
答案 0 :(得分:1)
如果您想使用Iterator
,那么您可以这样做:
interface ISomething { }
interface ISomethingElse extends Iterator<ISomething> {
doSomeJob(): void;
}
class ClassA implements ISomethingElse {
private counter: number = 0;
public next(): IteratorResult<ISomething>{
if (++this.counter < 10) {
return {
done: false,
value: this.counter
}
} else {
return {
done: true,
value: this.counter
}
}
}
public doSomeJob(): void {
let current = this.next();
while (!current.done) {
console.log(current.value);
current = this.next();
}
}
}
但是如果您想使用for/of
循环,那么您需要使用Iterable
:
interface ISomethingElse extends Iterable<ISomething> {
doSomeJob(): void;
}
class ClassA implements ISomethingElse {
[Symbol.iterator]() {
let counter = 0;
return {
next(): IteratorResult<ISomething> {
if (++this.counter < 10) {
return {
done: false,
value: counter
}
} else {
return {
done: true,
value: counter
}
}
}
}
}
public doSomeJob(): void {
for (let item of this) {
console.log(item);
}
}
}
但是你需要定位es6
,否则你会在for/of
循环中遇到错误(比如在游乐场):
键入'this'不是数组类型或字符串类型
您可以在此处找到有关此内容的更多信息:
Iterators and generators
在这里:
Iteration protocols
答案 1 :(得分:0)
我认为您正在为interfaces寻找extends
。
摘录:
扩展接口
与类类似,接口可以相互扩展。这允许您将一个接口的成员复制到另一个接口,这使您可以更灵活地将接口分成可重用的组件。
interface Shape {
color: string;
}
interface Square extends Shape {
sideLength: number;
}
let square = <Square>{};
square.color = "blue";
square.sideLength = 10;