Typescript:高阶组件的类型定义
问题描述:
我正在将项目转换为Typescript,并且遇到问题。我使用第三方库react-async-script-loader,所以我正在为它写一个类型定义文件。该库导出一个更高阶的组件,但是我无法在类型定义文件中表达它。Typescript:高阶组件的类型定义
这里的文件我现在所拥有的:
declare module 'react-async-script-loader' {
import { Component } from 'react';
class ElementClass extends Component<any, any> {}
interface ClassDecorator {
(component: ElementClass): ElementClass;
}
function scriptLoader(url: string): ClassDecorator;
export default scriptLoader;
}
我打电话的功能是这样的:
import * as scriptLoader from 'react-async-script-loader';
...
export default scriptLoader(url)(MyComponent);
不过,我在export default
声明收到此错误:
error TS2349: Cannot invoke an expression whose type lacks a call signature.
我不是很了解是什么导致了这一点,因为功能我exportin g接受一个字符串,并且似乎正在返回一个获取组件和输出组件的函数。
答
scriptLoader
正在导出为default
导出,但是您正在使用命名空间导入导入。
尝试将其更改为default
进口like in the docs:
import scriptLoader from "react-async-script-loader";
这奏效了!听起来像我需要刷新出口的工作。我一直认为,'从'y''导入*作为x和'从'y''导入x等价。 – jjwon