Typescript匿名类类型-HOC

时间:2019-03-19 19:56:16

标签: reactjs typescript jsx

我正在尝试创建通用HOC,但是我在类型方面遇到了一些麻烦

让我们从简单开始:

class Abc extends React.Component<{}> {

    hello() {
    }

    render() {
        return <View />
    }
}

JSX中的引用,没有问题

<Abc
    ref={(r: Abc) => {
        r.hello();
    }}
/>

现在让我们创建一个匿名文件,就像HOC会返回

const Bcd = class extends React.Component<{}> {

    hello() {
    }

    render() {
        return <View />
    }
}; 

做与过去一样的事情

<Bcd
    ref={(r: Bcd) => {
        r.load()
    }}
/>;

现在,对于以下TS2304: Cannot find name Bcd,我们得到了(r: Bcd)

我尝试将其更改为(r: (typeof Bcd)),但随后它会抱怨typeof BcdBcd不兼容

我做错什么了吗?打字稿不支持这种打字?

1 个答案:

答案 0 :(得分:0)

在您的示例中,Abc是JavaScript变量名称​​和是TypeScript类型名称,而Bcd是JavaScript变量名称,但不是 TypeScript类型名称。 Bcd的类型是{hello(): void} & React.Component<{}>的未命名intersection type。由于类型没有名称,因此您无法在TypeScript代码的其他地方将其引用为类型。