我正在我的React应用程序中导入@types/history
并使用其提供的createBrowserHistory()
功能。
我得到一个tslint错误说,
ERROR in C:/Users/eshan/my-website/src/App.tsx
ERROR in C:/Users/eshan/my-website/src/App.tsx(13,11):
typedef: expected variable-declaration: 'history' to have a typedef
我确实环顾了一下,但是减轻这种情况的所有尝试似乎都旨在通过执行/* tslint:disable */
来删除tslint规则。我想添加类型支持,并修复它。
import * as React from 'react';
import { Router, Route, Switch } from 'react-router-dom';
import { createBrowserHistory } from 'history';
import './App.css';
class App extends React.Component {
public render(): JSX.Element {
const history = createBrowserHistory();
return (
<div className='App'>
<Router history={history}>
<Switch>
<Route exact path='/' component={Landing}/>
<Route exact path='/Home' component={Home}/>
</Switch>
</Router>
</div>
);
}
}
export default App;
答案 0 :(得分:1)
您的问题根本与@types/history
库无关。就是在您的typedef
设置中配置了tslint.json
规则,要求在包含history
变量的地方进行类型定义。
此代码也可能会出现TSLint投诉:
const createMyHistory = () => ({
someMember: "someValue",
});
const history = createMyHistory();
..因为history
没有明确的类型定义。
有两种方法可以在没有// tslint:disable-next-line
的情况下解决错误:
禁用或配置typedef
规则以停止抱怨这种情况:请参阅https://palantir.github.io/tslint/rules/typedef/和https://palantir.github.io/tslint/usage/configuration。这可能最终成为您的tslint.json
的一部分:
{
"rules": {
"typedef": false
}
}
为history
变量添加一个显式类型定义:
const history: History = createBrowserHistory();
编辑:仅为了增加下面注释中的可见性,此处有两种名为History
的类型/接口。一种是DOM类型附带的全局定义的。另一个是在@types/history
中定义的。不幸的是,他们两个名字相同。如果您发现与History<any>
不兼容History
的错误,请从History
将import
添加到history
中:
import { createBrowserHistory, History } from 'history';
这将使您的代码引用@types/history
的版本。