Typescript & React:在组件与默认道具之间传递道具

pau*_*n22 6 typescript reactjs

我对 Typescript 相当陌生,并使用 Typescript 创建了一个 React 应用程序。我在将道具从一个组件传递到另一个组件时遇到了一些麻烦。我在下面包含了一个示例,我的问题是关于组件的默认道具。

当我在父组件中调用子组件时,出现错误:

Type '{}' is missing the following properties from type 'IProps': className, disabled ts(2739)

我认为因为我的子组件上有默认道具,所以当从其他组件调用该组件时,它们会填充任何缺失的道具。

我知道我可以IProps使用我的子组件的界面中的单个道具可选,className?: string但这不是我正在寻找的解决方案,因为它提出的问题多于解决的问题。

当我从另一个组件(如下所示)调用子组件时,我不想不必注意每个默认道具,对于某些组件,我有很多道具: <Child class={''} disabled={false} />

我确信对此有一个相当简单的解决方案,但到目前为止我找不到任何方向。欢迎任何建议或方向。

// Parent component: 

import React, { FC } from 'react'

import Child from './child'

const Parent: FC = () => {
    return (
        <Child />
    )
}

export default Parent


// Child component: 

import React, { FC } from 'react'

interface IProps {
  className: string
  disabled: boolean
}

const Child: FC<IProps> = ({ className, disabled }: IProps) => {
  return (
    <button className={className} disabled={disabled}>
      Click here
    </button>
  )
}

Child.defaultProps = {
  className: '',
  disabled: false,
}

export default Child
Run Code Online (Sandbox Code Playgroud)

pau*_*n22 6

解决了这个问题,对于看到这个答案的任何人:只需要按照下面的代码将默认道具以及任何道具传递到组件中:

import React, { FC } from 'react'

interface IProps {
  className: string
  disabled: boolean
}

const Child: FC<IProps & Child.defaultProps> = ({ className, disabled }: IProps) => {
  return (
    <button className={className} disabled={disabled}>
      Click here
    </button>
  )
}

Child.defaultProps = {
  className: '',
  disabled: false,
}
Run Code Online (Sandbox Code Playgroud)