reactjs - O interfață poate extinde doar un tip de obiect sau o intersecție de tipuri de obiecte cu membri cunoscuți static


Încerc să folosesc aici TextFieldProps, dar nimic nu funcționează. Cineva știe cum să rezolve această problemă? Cum se folosește TextFieldProps corect? Mulțumesc pentru ajutor.

import TextField, { TextFieldProps } from '@mui/material/TextField';
import { colorThemes } from '../../variables/style.variables';

interface BDBTextFieldProps extends TextFieldProps {
  customColor?: string;
}

export const BDBTextField = ({
  customColor = colorThemes.primary,
  ...props
}: BDBTextFieldProps) => {
  return (
    <TextField
      {...props}
      sx={{
        '& label.Mui-focused': {
          color: customColor,
        },
        '& .MuiOutlinedInput-root': {
          '&.Mui-focused fieldset': {
            borderColor: customColor,
          },
        },
      }}
    />
  );
};

Răspuns #1

  • @mui/material v5.11.16

  • TypeScript 5.1.3

Să aruncăm o privire asupra tipului TextFieldProps, este un tip de uniune. Cod sursă TextField.d.ts#L229

export type TextFieldProps = StandardTextFieldProps | FilledTextFieldProps | OutlinedTextFieldProps;

O interfață TS nu are voie să extindă un tip union.

type U = { a: number } | { b: string };

interface I30 extends U { x: string } // error

Poți extinde un tip prin intersecții așa cum este descris aici

import TextField, { TextFieldProps } from "@mui/material/TextField";

type BDBTextFieldProps = TextFieldProps & {
  customColor?: string;
};

const outlinedProps: BDBTextFieldProps = {
  variant: "outlined",
  customColor: "1"
};
const filledProps: BDBTextFieldProps = {
  variant: "filled",
  customColor: "2"
};
const standardProps: BDBTextFieldProps = {
  variant: "standard",
  customColor: "3"
};

codesandbox

Răspunsul #2

Folosirea unei interfețe nu îți permite să extinzi un obiect cu membri necunoscuți static. Încearcă să folosești în schimb un tip.