首页 文章

返回子类作为超类的类型

提问于
浏览
2

我正在使用TypeScript和React;我想扩展一个基本组件,然后有一个返回许多子类之一的函数 .

例如:

class SuperComponent extends React.Component { }

class SubComponent extends SuperComponent { }

function get(): SuperComponent {
    return SubComponent;
}

但是,TypeScript会引发以下错误:

错误TS2322:类型'typeof SubComponent'不能分配给'SuperComponent'类型 . 'typeof SubComponent'类型中缺少属性'setState' .

看起来这不是特定于React的,因为我可以很容易地重现它:

class BaseClass {
    myMethod() {}
}

class SuperClass extends BaseClass {}

class SubClass extends SuperClass {}

function get2(): SuperClass {
    return SubClass;
}

错误TS2322:类型'typeof SubClass'不能分配给'SuperClass'类型 . 'typeof SubClass'类型中缺少属性'myMethod' .

这应该是可能的,对吗?我错过了什么?

1 回答

  • 3

    您需要实际创建组件的实例:

    class SuperComponent extends React.Component { }
    
    class SubComponent extends SuperComponent { }
    
    function get(): SuperComponent {
        return new SubComponent({});
    }
    

    如果要返回组件的类型,则需要使用 typeof SuperComponent 作为返回类型:

    function get(): typeof SuperComponent {
        return SubComponent;
    }
    

相关问题