Rumah > hujung hadapan web > tutorial js > Memperluas sifat elemen HTML dalam TypeScript

Memperluas sifat elemen HTML dalam TypeScript

尊渡假赌尊渡假赌尊渡假赌
Lepaskan: 2025-02-08 11:09:09
asal
345 orang telah melayarinya

Petua TypeScript: Lanjutkan sifat elemen HTML

Artikel ini dikutip dari "Melepaskan Kuasa Typescript", yang akan menunjukkan kepada anda bagaimana untuk memperluaskan sifat -sifat elemen HTML dalam TypeScript. Dalam aplikasi yang besar, kami sering membina komponen berdasarkan elemen HTML standard, seperti butang tersuai, atau komponen yang menggabungkan tag dan medan input.

TypeScript memerlukan definisi sifat -sifat eksplisit yang diterima oleh komponen, yang boleh menjadi rumit bagi setiap harta. Untuk memadankan atribut yang digunakan oleh elemen HTML dalam React, anda boleh menggunakan React.ComponentProps. Untuk mengecualikan sifat tertentu, anda boleh menggunakan jenis utiliti Omit.

Untuk memperluaskan sifat komponen, anda boleh menggunakan jenis persimpangan. Ini membolehkan komponen menerima semua atribut elemen HTML serta atribut tambahan lain. Ini berguna untuk komponen yang mengubah gaya berdasarkan tema semasa atau menambah ciri baru kepada elemen HTML standard.

Kaedah 1: Memperluas sifat satu elemen HTML tunggal

Mari buat komponen butang tersuai dengan gaya dalam apl. Dalam JavaScript, kita boleh melakukan ini:

const Button = (props) => {
  return <button {...props} />;
};
Salin selepas log masuk

Dalam TypeScript, kita boleh menambah sifat yang diperlukan, seperti children:

const Button = ({ children }: React.PropsWithChildren) => {
  return <button>{children}</button>;
};
Salin selepas log masuk

Tetapi ini sangat rumit. Kita boleh menggunakan React.ComponentProps untuk memadankan atribut HTML button elemen:

const Button = (props: React.ComponentProps<'button'>) => {
  return <button {...props} />;
};
Salin selepas log masuk

Tetapi jika pengguna melewati harta className, ia menimpa gaya kami. Kita boleh menggunakan Omit untuk mengecualikan atribut tertentu:

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

const Button = (props: ButtonProps) => {
  return <button {...props} />;
};
Salin selepas log masuk

atau, kita boleh menggunakan perpustakaan clsx untuk menguruskan nama kelas:

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} />;
};
Salin selepas log masuk

Untuk melanjutkan atribut, anda boleh menggunakan jenis persimpangan:

type ButtonProps = React.ComponentProps<'button'> & {
  variant?: 'primary' | 'secondary';
};
Salin selepas log masuk

Komponen Button kini menerima semua atribut elemen button, serta atribut tambahan variant.

Kaedah 2: Buat komponen komposit

Satu lagi komponen biasa ialah komponen yang menggabungkan label dan elemen input:

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

const LabeledInput = ({ id, label, ...props }: LabeledInputProps) => {
  return (
    <>
      <label htmlFor={id}>{label}</label>
      <input id={id} {...props} />
    </>
  );
};
Salin selepas log masuk

Dengan cara ini, kita boleh menggunakan semula dan memperluaskan fungsi unsur -unsur HTML standard, meningkatkan kebolehkerjaan dan kebolehgunaan semula kod kami.

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

Artikel ini dikutip dari "melepaskan kuasa TypeScript".

Atas ialah kandungan terperinci Memperluas sifat elemen HTML dalam TypeScript. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan