Wyszukiwanie w witrynie

reactjs - Typescript - Jak mogę rozszerzyć interfejs o istniejącą właściwość?


Tworzę system UI za pomocą Reacta używając Typescript. Chcę stworzyć komponent <Input />, który wkomponowuje prawdziwy <input />. Komponent <Input /> powinien przyjmować jako właściwość każdy atrybut, który jest przyjmowany przez <input />.

Aby to zrobić, sprawdziłem, co <input /> w React akceptuje, i to był wynik:

React.DetailedHTMLProps<React.InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>;

Na początku ustawiłem mój interfejs w ten sposób:

interface InputProps extends React.DetailedHTMLProps<React.InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>;

ale jest za długie, żeby było zrozumiałe. Więc pomyślałem o użyciu Pick:

interface InputProps extends Pick<JSX.IntrinsicElements, 'input'>`

ale to po prostu dodaje do interfejsu samą właściwość input, zamiast faktycznie ją rozszerzać:

interface Props extends ...  {}

const Input = (props: Props) => {
    return <input {...props} />
}

Odpowiedź #1

interfejs dla natywnego wejścia to HTMLInputElement

interface InputProps extends HTMLInputElement {}

interfejs z właściwościami React

import { InputHTMLAttributes } from "react";

interface InputProps extends InputHTMLAttributes<HTMLInputElement>

aby uzyskać dostęp do ref, użyj przekazywanego ref:

const MyInput = React.forwardRef((props, ref) => {
  return(<input {...props} ref={ref} />);
});

Powiązane artykuły