如何修复“TS2349:无法调用类型缺少调用签名的表达式”

IT技术 reactjs typescript definitelytyped
2021-05-25 21:27:03

绝对类型库:

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')
    );
}

我究竟做错了什么?

2个回答

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

import createBrowserHistory from 'history/lib/createBrowserHistory';

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

如果您遇到问题,可能是由于 Babel 编译的版本与 TypeScript 导入不兼容。

相反,尝试像这样导入它:

import { createBrowserHistory } from 'history';