2016-06-13 178 views
0

我正在将项目转换为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接受一个字符串,并且似乎正在返回一个获取组件和输出组件的函数。

回答

2

scriptLoader正在导出为default导出,但是您正在使用命名空间导入导入。

尝试将其更改为default进口like in the docs

import scriptLoader from "react-async-script-loader"; 
+0

这奏效了!听起来像我需要刷新出口的工作。我一直认为,'从'y''导入*作为x和'从'y''导入x等价。 – jjwon