用条件反应打字稿组件集道具

时间:2021-05-27 03:35:02

标签: reactjs typescript

我想在定义变量值时设置组件的 prop。 以下是我当前的代码。

import Cropper from 'react-easy-crop'
...
interface State {
 ...
  coverFile: File | null;
  ...
}
class Test extends React.PureComponent<Props, State> {
  state = {
    ...
    coverFile: null,
    ...
  };
...
const file = event.target.files;
self.setState({
              coverFile: file[0],
            });

<Cropper
  image={coverFile?coverFile:undefined}
  ...
/>

这是错误信息。

No overload matches this call.
  Overload 1 of 2, '(props: Readonly<CropperProps>): Cropper', gave the following error.
    Type 'null | undefined' is not assignable to type 'string | undefined'.
      Type 'null' is not assignable to type 'string | undefined'.
  Overload 2 of 2, '(props: CropperProps, context?: any): Cropper', gave the following error.
    Type 'null | undefined' is not assignable to type 'string | undefined'.ts(2769)

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

这解释了您的错误消息

<块引用>

输入'null | undefined' 不能分配给类型 'string |未定义'。

Cropper 的图像道具需要 stringundefined,但您传递的是 nullundefined

您是否将 coverFile 初始化为 null?如果是这样,您可以将其设置为 undefined 以消除错误

更新: 如果您无法弄清楚 null 的来源,您可以简单地执行以下操作:

<Cropper
  image={coverFile || undefined}
  ...
/>

答案 1 :(得分:0)

首先,你不需要使用 (JSX attribute) image?: string | undefined 你可以写 image?: string 因为,通过严格的空检查,一个可选参数会自动添加 | undefined

其次,基于 react-easy-crop document 它需要 imagevideo(至少其中之一)是必需的,所以如果有一个未定义的图像,你需要传递一个有效的 video 参数我认为这会有所帮助:

 {coverFile && (
  <Cropper
   image={coverFile}
   ...
 />)
 }