Typescript:高阶组件的类型定义

时间:2016-06-13 05:49:19

标签: javascript reactjs typescript

我正在将项目转换为Typescript,并且遇到了问题。我使用第三方库react-async-script-loader,所以我正在为它编写一个类型定义文件。该库导出一个更高阶的组件,但我在类型定义文件中表达它时遇到了麻烦。

这是我现在的文件:

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.

我无法理解导致这种情况的原因,因为我导出的函数接受一个字符串,并且似乎返回一个带有组件并输出组件的函数。

1 个答案:

答案 0 :(得分:2)

push正在导出为scriptLoader导出,但您正在使用命名空间导入进行导入。

尝试将其更改为default导入like in the docs

default