【发布时间】:2017-09-12 09:24:20
【问题描述】:
我正在使用 Typescript 构建一个 React 应用程序,并且对于我试图包含在我的路由器中的每个组件,我都收到以下错误。
ERROR in [at-loader] ./src/scripts/components/AppRouter.tsx:14:25
TS2322: Type 'typeof "E:/Programming Projects/free-food-app/src/scripts/components/OverviewPage"' is not assignable to type 'ReactType'.
Type 'typeof "E:/Programming Projects/free-food-app/src/scripts/components/OverviewPage"' is not assignable to type 'StatelessComponent<any>'.
Type 'typeof "E:/Programming Projects/free-food-app/src/scripts/components/OverviewPage"' provides no match for the signature '(props: any, context?: any): ReactElement<any>'
我完全不明白。似乎扩展 React.Component 的类应该能够包含在路由器中。为什么会出现这些错误?
AppRouter.tsx:
import * as React from 'react';
import { Router, Route, hashHistory } from 'react-router';
import * as OverviewPage from './OverviewPage';
import * as AssignmentViewPage from './AssignmentViewPage';
import * as SubmissionEditPage from './SubmissionEditPage';
import * as SubmissionSubmitPage from './SubmissionSubmitPage';
import * as SubmissionViewPage from './SubmissionViewPage';
export default class AppRouter extends React.Component<any, any> {
public render() {
return (
<Router history={hashHistory}>
<Route path="/" component={OverviewPage}/>
<Route path="/assingment" component={AssignmentViewPage}/>
<Route path="/submission/edit" component={SubmissionEditPage}/>
<Route path="/submission/submit" component={SubmissionSubmitPage}/>
<Route path="/submission/" component={SubmissionViewPage}/>
</Router>
);
}
}
编辑:OverviewPage.tsx
import * as React from 'react';
class OverviewPage extends React.Component<any, any> {
public render() {
return (
<div>
<p>Overview</p>
</div>
);
}
}
export { OverviewPage }
【问题讨论】:
-
你传递给路由器的每个组件的 props 和 state 的类型是什么?
-
你能发布你的一个组件(OverviewPage)吗?您的导入看起来很奇怪,为什么您将全部导入为 * ?
-
@soywod 我开始导入为
import OverviewPage from './OverviewPage';。它将错误消息更改为:TS2322: Type '{ OverviewPage: typeof OverviewPage; }' is not assignable to type 'ReactType'. Object literal may only specify known properties, and 'OverviewPage' does not exist in type 'ReactType'. -
@promisified 我编辑了问题以添加我要传递给路由器的组件。
-
回答导入问题。由于您没有使用导出默认值,因此您的导入应使用括号语法。导入 {component}。
标签: reactjs typescript react-router