reactjs - 如何修复 "TS2349: Cannot invoke an expression whose type lacks a call signature"

标签 reactjs typescript definitelytyped

DefinitelyTyped 库:

declare module "history/lib/createBrowserHistory" 
{
    export default function createBrowserHistory(options?: HistoryModule.HistoryOptions): HistoryModule.History
}

像这样使用时在标题中给出编译错误(尽管它在转换为 .tsx 之前在普通的旧 .jsx 中工作):

import React = require('react');
import reactDom = require('react-dom');
import ReactRouter = require('react-router');
import createBrowserHistory = require('history/lib/createBrowserHistory');
import routes = require('app/tools/routes');

export function createReactApp() : void
{
    let history = createBrowserHistory(); // <-- error :(
    reactDom.render
    (
        <ReactRouter.Router history={history}>{routes}</ReactRouter.Router>,
        document.getElementById('app')
    );
}

我做错了什么?

最佳答案

您尝试使用的模块是 ES6 模块,因此您必须使用 ES6 语法导入它:

import createBrowserHistory from 'history/lib/createBrowserHistory';

或者,您可以使用遗留的 import = 语法并访问导出对象的 default 属性,而不是默认导出(但您不应该这样做;使用 ES6导入!)。

关于reactjs - 如何修复 "TS2349: Cannot invoke an expression whose type lacks a call signature",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34443593/

相关文章:

javascript - 无法将文件对象从reactjs发送到nodejs

reactjs - 如何将其他类型导入我的 TypeScript 自定义声明文件?

javascript - 用值替换分界线

javascript - 将 JQueryUI 与 TypeScript 和 DefinitelyTyped 定义文件一起使用时出错

reactjs - 如何在 Material UI 中允许使用 2 个小数点分隔符?

reactjs - 如何在 HOC 中使用 refs?

Javascript Promise 解决混淆

html - Angular 。在 flex 列表中拖放

reactjs - 克隆元素 : Type has no properties in common with type Partial<P> & Attributes

typescript - 如何在 Typescript 中声明一个 Generic Promise,以便当 Generic 类型为 "<void>"时,其中一个方法不会采用参数?