Maison > interface Web > js tutoriel > Étendre les propriétés d'un élément HTML dans TypeScript

Étendre les propriétés d'un élément HTML dans TypeScript

尊渡假赌尊渡假赌尊渡假赌
Libérer: 2025-02-08 11:09:09
original
370 Les gens l'ont consulté

Conseils de typeScript: étendre les propriétés des éléments HTML

Cet article est extrait de "libérer la puissance de TypeScript", qui vous montrera comment étendre les propriétés des éléments HTML dans TypeScript. Dans les grandes applications, nous construisons souvent des composants basés sur des éléments HTML standard, tels que des boutons personnalisés ou des composants qui combinent des balises et des champs d'entrée.

TypeScript nécessite une définition explicite des propriétés acceptées par le composant, qui peut être lourde pour chaque propriété. Pour correspondre aux attributs utilisés par les éléments HTML dans React, vous pouvez utiliser React.ComponentProps. Pour exclure certaines propriétés, vous pouvez utiliser le type d'utilité Omit.

Pour étendre les propriétés d'un composant, vous pouvez utiliser le type d'intersection. Cela permet au composant d'accepter tous les attributs de l'élément HTML ainsi que d'autres attributs supplémentaires. Ceci est utile pour les composants qui modifient les styles basés sur le thème actuel ou ajoutent de nouvelles fonctionnalités aux éléments HTML standard.

Méthode 1: étendez les propriétés d'un seul élément HTML

Créons un composant de bouton personnalisé avec style dans l'application. En JavaScript, nous pouvons le faire:

const Button = (props) => {
  return <button {...props} />;
};
Copier après la connexion

Dans TypeScript, nous pouvons ajouter les propriétés nécessaires, telles que children:

const Button = ({ children }: React.PropsWithChildren) => {
  return <button>{children}</button>;
};
Copier après la connexion

Mais c'est très lourd. Nous pouvons utiliser React.ComponentProps pour correspondre aux attributs des éléments HTML button:

const Button = (props: React.ComponentProps<'button'>) => {
  return <button {...props} />;
};
Copier après la connexion

mais si l'utilisateur passe la propriété className, il remplace notre style. Nous pouvons utiliser Omit pour exclure des attributs spécifiques:

type ButtonProps = Omit<React.ComponentProps<'button'>, 'className'>;

const Button = (props: ButtonProps) => {
  return <button {...props} />;
};
Copier après la connexion

ou, nous pouvons utiliser la bibliothèque clsx pour gérer les noms de classe:

import React from 'react';
import clsx from 'clsx';

type ButtonProps = React.ComponentProps<'button'>;

const Button = ({ className, ...props }: ButtonProps) => {
  return <button className={clsx('button', className)} {...props} />;
};
Copier après la connexion

Pour étendre l'attribut, vous pouvez utiliser le type d'intersection:

type ButtonProps = React.ComponentProps<'button'> & {
  variant?: 'primary' | 'secondary';
};
Copier après la connexion

Le composant Button accepte désormais tous les attributs de l'élément button, ainsi que des attributs variant supplémentaires.

Méthode 2: Créez un composant composite

Un autre composant commun est le composant qui combine des étiquettes et des éléments d'entrée:

type LabeledInputProps = React.ComponentProps<'input'> & {
  label: string;
};

const LabeledInput = ({ id, label, ...props }: LabeledInputProps) => {
  return (
    <>
      <label htmlFor={id}>{label}</label>
      <input id={id} {...props} />
    </>
  );
};
Copier après la connexion

De cette façon, nous pouvons facilement réutiliser et étendre les fonctionnalités des éléments HTML standard, améliorant la maintenabilité et la réutilisabilité de notre code.

Extending the Properties of an HTML Element in TypeScript Extending the Properties of an HTML Element in TypeScript

Cet article est extrait de "libérer la puissance de TypeScript".

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal