sty*_*iss 8 typescript typescript-generics
以下代码不起作用:
function deco<T>(){
return function(target, key){
// before
// target[key] = new Decorated<T>();
// edited
Object.defineProperty(target, key, {
get(){
return new Decorated<T>();
}
});
}
}
class Decorated<T> {
set(values: T){
}
}
class MyDecos {
@deco<{a: number}>() a;
@deco<{b: string}>() b;
}
const test = new MyDecos;
test.a.set(); // want to throw error
test.a.set({a: '1'); // want to throw error
test.b.set({b: 1); // want to throw error
Run Code Online (Sandbox Code Playgroud)
通用有什么问题吗?显示助手values: any
我想要Test.set使用装饰器中的泛型的方法
装饰器不能改变类的结构,这个限制是设计使然的。我们可以使用 mixins 来实现类的突变,如此处所述。
但是,如果没有更完整的示例,我不确定为什么您不直接使用 的 insatnce 来实例化该字段Decorated<T>。在这种情况下,装饰器版本似乎没有添加太多:
class MyDecos {
a = new Decorated<{ a: number }>();
b = new Decorated<{ b: string }>();
}
const test = new MyDecos;
test.a.set(); // error
test.a.set({ a: '1'); //error
test.b.set({ b: 1); // error
Run Code Online (Sandbox Code Playgroud)
注意您当前的装饰器实现不好,您分配Decorated给target,target该类不是该类的实例,因此该类的所有Decorated实例仅存在一个对象,我猜这意味着保存实例状态,因此该实现将导致问题。
| 归档时间: |
|
| 查看次数: |
5954 次 |
| 最近记录: |