Mat*_*rný 5 getter generator typescript
我可以声明 getter,其行为类似于函数生成器吗?
我的尝试
class Foo {
* Test1(): IterableIterator<string> { // Works, but not a getter...
yield "Hello!";
}
* get Test2(): IterableIterator<string> { // Syntax error
yield "Hello!";
}
get * Test3(): IterableIterator<string> { // Syntax error
yield "Hello!";
}
get Test4(): IterableIterator<string> { // Works, but ugly syntax...
return function* (): IterableIterator<string> {
yield "Hello!";
}();
}
}
Run Code Online (Sandbox Code Playgroud)
例如在 C# 中,这是完全有效的......
class Foo
{
IEnumerable<string> Test
{
get
{
yield return "Hello!";
}
}
}
Run Code Online (Sandbox Code Playgroud)
TypeScript 或 JavaScript 中没有这样的语法。getter 应该返回一个迭代器:
class Foo {
private * _bar() {
yield "Hello!";
}
get bar(): IterableIterator<string> {
return this._bar();
}
}
Run Code Online (Sandbox Code Playgroud)
这可以通过装饰器来解决,但由于装饰器不能很好地支持类突变,因此应手动处理正确的类型:
function get<T>(getter: keyof T) {
return (target: any, method: string, descriptor?: any) => {
Object.defineProperty(target, getter, {
configurable: true,
enumerable: false,
get() {
return this[method]();
}
});
};
}
interface Foo {
bar: IterableIterator<string>;
}
class Foo {
@get<Foo>('bar')
private * _bar() {
yield "Hello!";
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
691 次 |
| 最近记录: |