Reactjs和typescript错误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

从JumboBooks组件将方法searchForBooks作为道具传递给SearchBooks组件时,我遇到了TS2322错误:

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
组件吗?谢谢,当我添加:谢谢,它工作了我补充说: