因此,我试图建立对Typescript Decorators的理解,而我一直停留在有关Class装饰器的示例上。给出的示例显示了如何通过function(){}形成类装饰器。
function classDecorator<T extends {new(...args:any[]):{}}>(constructor:T){
return class extends constructor {
newProperty = "new property";
hello = "override";
}
}
@classDecorator
class Greeter {
property = "property";
hello: string;
constructor(m: string) {
this.hello = m;
}
}
console.log(new Greeter("world"));
什么是:
return class extends constructor {
newProperty = "new property";
hello = "override";
}
函数如何返回扩展参数的“类”关键字(称为“构造”)?我很困惑。
这里是原始来源的链接(只需滚动到类装饰器的中间部分):https://www.typescriptlang.org/docs/handbook/decorators.html
感谢任何帮助!
答案 0 :(得分:0)
您需要查看装饰器的完整声明:
function classDecorator<T extends {new(...args:any[]):{}}>(constructor:T) {
return class extends constructor {
newProperty = "new property";
hello = "override";
}
}
这太过分了,但是这是怎么回事。
constructor
的类型满足T
类型的参数。
此类型参数T extends {new(...args:any[]):{}}
适用于任何具有构造函数的对象,该构造函数采用任意数量的任何类型的参数(即几乎任何东西)。
此修饰器的作用是返回返回的不同类,而不是返回传入的constructor
。
请注意,语法return class { ... }
是从函数返回匿名类的一种方式,就像return function() { ... }
返回匿名函数一样。
class extends constructor
意味着匿名类继承了constructor
的所有方法和属性(构造函数是要修饰的类)。