javascript - I React Typescript, hvordan definerer man typen for ...rest-parameteret for native HTML-elementer?


Jeg prøver å filtrere noen props og deretter sende resten av propsene videre til et native HTML-element slik:

const Placeholder = (
  display: boolean,
  ...rest: Array<React.LabelHTMLAttributes<HTMLLabelElement>>
) => <label {...rest} />

Problemet er at dette gir meg denne feilen:

Type '{ length: number; toString(): string; toLocaleString(): string; pop(): LabelHTMLAttributes<HTMLLabelElement> | undefined; push(...items: LabelHTMLAttributes<HTMLLabelElement>[]): number; ... 28 more ...; flat<U>(this: U[][][][][][][][], depth: 7): U[]; flat<U>(this: U[][][][][][][], depth: 6): U[]; flat<U>(this: U[]...' has no properties in common with type 'DetailedHTMLProps<LabelHTMLAttributes<HTMLLabelElement>, HTMLLabelElement>'.ts(2559)

Hvordan vil jeg definere typene for ...rest-parametrene for et native HTML-element som en label i Typescript/React?

Svar #1

Typen til label er: React.DetailedHTMLProps<React.LabelHTMLAttributes<HTMLLabelElement>, HTMLLabelElement>

Så ved å stole på dette, bør noe som dette fungere:

interface Props
  extends React.DetailedHTMLProps<
    React.LabelHTMLAttributes<HTMLLabelElement>,
    HTMLLabelElement
  > {
  display: boolean;
}

const Placeholder = ({ display, ...rest }: Props) => <label {...rest} />;

const App = () => <Placeholder display htmlFor="form" />;

Merk også at siden det første argumentet props blir destrukturert som et objekt (så ...rest er de gjenværende props som et objekt), ikke som et array.

Relaterte artikler