Reactjs和typescript错误TS2322:类型不可分配给类型';内在的颂词;内在类属性
从JumboBooks组件将方法searchForBooks作为道具传递给SearchBooks组件时,我遇到了TS2322错误:Reactjs和typescript错误TS2322:类型不可分配给类型';内在的颂词;内在类属性,reactjs,typescript,Reactjs,Typescript,从JumboBooks组件将方法searchForBooks作为道具传递给SearchBooks组件时,我遇到了TS2322错误: export class SearchBooks extends React.Component<IBookSearchProps, {}> { jumboooks.tsx(父级) 从“react router”导入{RouteComponentProps}; ... 导出类jumboooks扩展React.Component{ ... searchF
export class SearchBooks extends React.Component<IBookSearchProps, {}> {
jumboooks.tsx(父级)
从“react router”导入{RouteComponentProps};
...
导出类jumboooks扩展React.Component{
...
searchForBooks(searchFilters:SearchParameters){…}
...
公共渲染(){
返回(
...
}
SearchBooks.tsx
import { RouteComponentProps } from 'react-router';
...
interface IBookSearchProps {
searchForBooks:(filters: SearchParameters)=> void;
}
export class SearchBooks extends React.Component<IBookSearchProps & RouteComponentProps<{}>, {}> {
isearchForBooks() {
var filters: SearchParameters = {
// fill up parameters based on ref values
};
this.props.searchForBooks(filters);
}
...
}
export interface SearchParameters
{
...
}
从“react router”导入{RouteComponentProps};
...
接口IBookSearchProps{
searchForBooks:(过滤器:SearchParameters)=>void;
}
导出类SearchBooks扩展React.Component{
isearchForBooks(){
变量筛选器:SearchParameters={
//基于ref值的填充参数
};
这个.props.searchForBooks(过滤器);
}
...
}
导出接口搜索参数
{
...
}
错误:
错误:
TS2322:类型“{searchForBooks:(searchFilters:SearchParameters)=>void;}”不可分配给类型“IntrinsicatAttributes&IntrinsicClassAttributes&Readonly…”。
类型“{searchForBooks:(searchFilters:SearchParameters)=>void;}”不能分配给类型“Readonly>”。
类型{searchForBooks:(searchFilters:SearchParameters)=>void;}中缺少属性“match”
只有您的
jumboooks
实际上被用作路由组件(作为
传递),因此只有它会自动接收匹配道具。您想要访问匹配的任何jumboooks
的后代都必须像普通的旧道具一样进行传递:
export class JumboBooks extends React.Component<RouteComponentProps<{}>, {}> {
public render() {
return (
<div>
<SearchBooks
match={this.props.match}
searchForBooks={this.searchForBooks}
/>
</div>
);
}
}
只有您的jumboooks
实际上被用作路由组件(作为
传递),因此只有它会自动接收匹配道具。您想要访问匹配的任何jumboooks
的后代都必须像普通的旧道具一样进行传递:
export class JumboBooks extends React.Component<RouteComponentProps<{}>, {}> {
public render() {
return (
<div>
<SearchBooks
match={this.props.match}
searchForBooks={this.searchForBooks}
/>
</div>
);
}
}
RouteComponentProps
正在向您的SearchBooks
组件添加一个必要的match
prop,但它没有提供。这是后来的一个HOC提供的吗?@RossAllen我有这个导入{RouteComponentProps}“react router”中的语句;两者都有。@John是对的,但类型抱怨是当你像这样实例化SearchBooks
时:
,它没有得到你所说的匹配
道具,当你做&RouteComponentProps
时它需要的道具。那匹配
道具来自哪里?这个组件是什么包装在一个高阶组件中?@RossAllen你已经搞定了!你能让我知道如何传递匹配道具吗?作为这个问题的答案,在这个评论中。你在渲染
时使用的是哪个组件?是你的Jumboooks
组件吗?RouteComponentProps
正在添加一个必要的de>将
prop与您的SearchBooks
组件进行匹配,但未提供该组件。这是否来自稍后的HOC?@RossAllen我有此导入{RouteComponentProps}“react router”中的语句;两者都有。@John是对的,但类型抱怨是当你像这样实例化SearchBooks
时:
,它没有得到你所说的匹配
道具,当你做&RouteComponentProps
时它需要的道具。那匹配
道具来自哪里?这个组件是什么包装在一个高阶组件中?@RossAllen你已经搞定了!你能告诉我如何传递匹配道具吗?作为这个问题的答案,改为在这个评论中。你在渲染
时使用的是哪个组件吗?那是你的Jumboooks
组件吗?谢谢,当我添加:谢谢,它工作了我补充说: