gpt4 book ai didi

typescript 装饰器构造函数覆盖包括附加参数

转载 作者:搜寻专家 更新时间:2023-10-30 21:05:25 24 4
gpt4 key购买 nike

根据typescript decorators documentation用于替换构造函数的装饰器示例不会将任何参数传递给装饰器函数。我怎样才能做到这一点?

这是医生说的

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;
}
}

但我现在想像下面这样使用装饰器来传递参数

@classDecorator({
// some object properties fitting DecoratorData type
})

我只是尝试添加第二个数据参数

function classDecorator<T extends {new(...args:any[]): {}}>(constructor: T, data: DecoratorData)

但这只是 tslint 需要 2 个参数,得到 1 个。插入 null 占位符也不起作用。我还尝试使用 constructor 参数作为第二个可选参数。这会导致签名不匹配错误。

最佳答案

您需要使用一个装饰器生成器,一个返回装饰器函数的函数。生成器函数可以接受额外的参数,内部装饰器函数可以捕获这些参数并使用它们。

function classDecorator(data: DecoratorData) {
return function <T extends { new(...args: any[]): {} }>(constructor: T) {
return class extends constructor {
newProperty = "new property";
hello = "override";
// use daat here
}
}
}

@classDecorator({ data: "" })
class Greeter {
property = "property";
hello: string;
constructor(m: string) {
this.hello = m;
}
}

关于 typescript 装饰器构造函数覆盖包括附加参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49026546/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com