我正在尝试创建通用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 Bcd
与Bcd
不兼容
我做错什么了吗?打字稿不支持这种打字?
答案 0 :(得分:0)
在您的示例中,Abc
是JavaScript变量名称和是TypeScript类型名称,而Bcd
是JavaScript变量名称,但不是 TypeScript类型名称。 Bcd
的类型是{hello(): void} & React.Component<{}>
的未命名intersection type。由于类型没有名称,因此您无法在TypeScript代码的其他地方将其引用为类型。