方法参数应该是给定类的子类

时间:2017-07-27 10:43:04

标签: typescript inheritance typescript2.0

我正在努力定义一个正确获取基类子类的方法。

handle(content: AbstractClass)

直接使用继承类调用它会导致类型'ConcreteClass'的参数不能分配给'AbstractClass'类型的参数

我已尝试使用界面,类似结果类型'typeof ConcreteClass'的参数不能分配给'Interface'类型的参数

class AbstractClass implements Interface

handle(content: Interface)

我找到了类似topic的问题,但解决方案也没有帮助我。

interface ClassConstructor<T extends AbstractClass> {
  new(): T;
}

abstract class AbstractClass {
  private test: string;

  constructor(value: string) {}
}

class B extends AbstractClass {
  private test2: string;

  constructor(value: string, value2: number) {
    super(modal);
  }
}

class S1 {
  show(content: ClassConstructor<AbstractClass>) {}

  b() {
    this.a(B);
  }
}

playground

我希望实现方法show可以采用 AbstractClass 的每个实现,而不管它是如何定义的。不同的构造者和类似的 我通过构造函数将它与Angular和Angular resolve依赖项结合使用。

如何使用TypeScript执行此操作?

1 个答案:

答案 0 :(得分:0)

那是因为构造函数的签名不匹配。

这有效:

interface ClassConstructor<T extends A> {
    new(value: string): T;
}

class B extends A {
    private test2: string;

    constructor(value: string) {
        super(value);
    }
}

class S1 {
    a(content: ClassConstructor<B>) {}
    b() {
        this.a(B);
    }
}

现在不同的构造函数共享相同的签名。