Typescript 如何键入类装饰器工厂?
我发现了无数的线程,其中没有一个与我的用例和TypeScript版本(2.8.1)完全匹配。我尝试过一些极为基础的装饰工厂,但运气不佳Typescript 如何键入类装饰器工厂?,typescript,Typescript,我发现了无数的线程,其中没有一个与我的用例和TypeScript版本(2.8.1)完全匹配。我尝试过一些极为基础的装饰工厂,但运气不佳 type Constructable<T> = { new (): T } function decoratorFactory<T> (): (Base: Constructable<T>) => Constructable<T> { return function decorator (Base: C
type Constructable<T> = { new (): T }
function decoratorFactory<T> (): (Base: Constructable<T>) => Constructable<T> {
return function decorator (Base: Constructable<T>): Constructable<T> {
return class extends Base { // line 5
constructor () {
super()
console.log('in constructor')
}
}
}
}
@decoratorFactory()
class Example {}
我已经看到一些示例使用了T extends
,但这对我来说并没有解决任何问题:
interface ClassOrInterface {}
type Constructable<T> = { new (): T }
function decoratorFactory<T extends ClassOrInterface> (): (Base: Constructable<T>) => Constructable<T> {
return function decorator (Base: Constructable<T>): Constructable<T> {
return class extends Base {
constructor () {
super()
console.log('in constructor')
}
} as Constructable<T>
}
}
@decoratorFactory()
class Example {}
我看到的答案表明你可以。我看到的答案是交替使用new()=>T
和{new():T}
。我见过。我看到的答案只是,而不是一个新的构造函数/类
我怎么能做我想做的
type Constructable<T> = { new (): T }
function decoratorFactory<T> (): (Base: Constructable<T>) => Constructable<T> {
return function decorator (Base: Constructable<T>): Constructable<T> {
return class extends Base {
constructor () {
super()
console.log('in constructor')
}
} as Constructable<T>
}
}
@decoratorFactory()
class Example {}
index.ts(5,26): error TS2509: Base constructor return type 'T' is not a class or interface type.
interface ClassOrInterface {}
type Constructable<T> = { new (): T }
function decoratorFactory<T extends ClassOrInterface> (): (Base: Constructable<T>) => Constructable<T> {
return function decorator (Base: Constructable<T>): Constructable<T> {
return class extends Base {
constructor () {
super()
console.log('in constructor')
}
} as Constructable<T>
}
}
@decoratorFactory()
class Example {}
index.ts(6,26): error TS2509: Base constructor return type 'T' is not a class or interface type.