首页 文章

类型检查类(不是类的实例)扩展了另一个类

提问于
浏览
0

鉴于以下课程:

class BaseClass {}

我想创建另一个扩展此类的类,即:

class ExtendedClass extends BaseClass {}

然后我想将 ExtendedClass 作为参数传递给另一个函数( not 一个 ExtendedClass 的实例,但类本身!),并通过确保 ExtendedClass 扩展 BaseClass 来键入检查 .

这不起作用:

function helloClass (c: BaseClass) {}

因为 c: BaseClass 表示 c 应该是 BaseClassinstance (或扩展 BaseClass 的东西) - 但不是扩展 BaseClass 本身的类 .

这在TypeScript中是否可行?

1 回答

  • 4

    你可以代表这样的类: { new(): BaseClass } .

    或者在一个例子中:

    interface BaseClassConstructor<T extends BaseClass> {
        new (): T;
    }
    
    class BaseClass {
        str: string;
    }
    
    class ExtendedClass extends BaseClass { }
    
    function fn<T extends BaseClass>(ctor: BaseClassConstructor<T>) {
    
    }
    
    fn(BaseClass); // fine
    fn(ExtendedClass); // fine
    
    class A {
        prop: any;
    }
    
    fn(A);  // error
    

    code in playground

相关问题