skip to Main Content

I need help )

enter image description here

return (
        <ButtonWrapperStyled>
            <input {...getInputProps()} />
            <Button {...getRootProps()}>Загрузить</Button>

            {files.map((file) => {//file maybe FileProps or File type
                if (file) {// How can I check file type here?
                    return <div>{file.fileId}</div>
                } else {
                    return <div>{file.fileId}</div>
                }
            })}
        </ButtonWrapperStyled>
)

I typed array, it may be FileProps or File type.
How can I check it correctly in files.map?

I can’t resolve this issue

2

Answers


  1. Chosen as BEST ANSWER
    // This option doesn't work, why?
    {files.map((file) => {
        if (file?.fileId) {
            return <div>{file.fileName}</div>
        } else {
            return <div>{file.name}</div>
        }
    })}
    //This option works
    {files.map((file) => {
        if ('fileId' in file) {
            return <div>{file.fileName}</div>
        } else {
            return <div>{file.name}</div>
        }
    })}
    

  2. You need to use type guards Type Guards and Differentiating Types

    type File = {
      fileId: number;
    };
    
    type FileProps = {
      name: string;
      size: number;
    };
    
    const files: (FileProps | File)[] = [];
    
    files.map((file) => {
      if ('fileId' in file) {
        return <div>{file.fileId}</div>;
      } else {
        return <div>{file.name}</div>;
      }
    }, []);
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search