Typescript 如何键入类装饰器工厂?

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

我发现了无数的线程,其中没有一个与我的用例和TypeScript版本(2.8.1)完全匹配。我尝试过一些极为基础的装饰工厂,但运气不佳

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.