reactjs - 如何在 React 中将 PropTypes 与 Typescript 结合使用

标签 reactjs typescript react-proptypes

我尝试将 PropTypes 与 Typescript 一起使用,但出现错误:

没有 typescript ,我可以使用:

class TodoFilterItem extends Component {
  constructor (props) {
    super(props);

然后在底部

TodoFilterItem.propTypes = {
  name: PropTypes.string,
  filter: PropTypes.string,
  filterTodos: PropTypes.any
}

这对于只有 PropTypes 的情况有效(即没有 typescript )。

但是,当我添加 Typescript 时,我有

class TodoFilterItem extends Component<ITodoFilterItem> {
  constructor (props:ITodoFilterItem) {
    super(props);
    ...

我有 props 作为这样的界面:

interface ITodoFilterItem  {
  filter: string,
  name: string,
  filterTodos: any
}

我使用相同的 propTypes:

TodoFilterItem.propTypes = {
  filter: PropTypes.string,
  name: PropTypes.string,
  filterTodos: PropTypes.any
}

我收到错误

Property 'propTypes' does not exist on type 'typeof import("/my_adrs/node_modules/@types/prop-types/index")'.  

如何解决这个问题并能够在 React 中将 PropTypes 与 Typescript 结合使用?

最佳答案

PropTypes 与 Typescript 是分开的。要重用 propTypes,您必须将其转换为接口(interface)或类型。

这个

TodoFilterItem.propTypes = {
  filter: PropTypes.string,
  name: PropTypes.string,
  filterTodos: PropTypes.any
}

变成了

interface ITodoFilterItem {
  filter: string;
  name: string;
  filterTodos: any; 
}

使用该界面很简单,只需将 TodoFilterItemProps 替换为 ITodoFilterItem

惯例是将组件 props 命名为 IProps。将它们放在一起您的组件现在看起来像:

interface IProps { 
 name: string;
 filter: string;
 filterTodos: any; 
}

class TodoFilterItem extends Component<IProps> {
  constructor (props:IProps) {
    super(props);
    ...

关于任何的注释

尽量避免输入anyany 类型与无类型相同。我想 filterTodos 是一个 todos 数组。如果是这种情况,您可以为 todo 创建一个类型来调用它

type Todo = { ...properties of a todo } 

然后输入 filterTodos 作为 Todo 数组,如下所示:

type Todo = { 
  name: string,
  status: 'not started' | 'in progress' | 'done'
}

interface IProps { 
  filter: string;
  name: string;
  filterTodos: Todo[]; 
}

关于reactjs - 如何在 React 中将 PropTypes 与 Typescript 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62986882/

相关文章:

reactjs - react 警告 : Failed prop type: Invalid prop of type `Object` supplied

node.js - 带有 Nest js 后端 api 的 Azure Active Directory Spa 用户流程

javascript - ReactJS 不同的类

javascript - 在 Angular4 应用程序中创建自己的日期选择器

reactjs - 如何为 React 类组件声明附加属性?

javascript - 将元素拖到其可滚动父 div 之外 - ( React-Draggable )

reactjs - 我们需要带有 TypeScript 的 propTypes 吗?

javascript - 无状态 react 函数显示无效的 proptype,即使它是

javascript - Redux store没有有效的reducer,有combineReducers和有效的reducer

javascript - 如何在Web项目中像div标签一样使用View