Rumah >hujung hadapan web >tutorial js >Menguasai Jenis Literal dalam TypeScript: true sebagai const vs true

Menguasai Jenis Literal dalam TypeScript: true sebagai const vs true

Linda Hamilton
Linda Hamiltonasal
2024-12-20 19:21:11407semak imbas

Mastering Literal Types in TypeScript: true as const vs true

Dalam TypeScript, terdapat perbezaan yang ketara antara kedua-dua pernyataan:

  1. clientLoader.hydrate = benar sebagai const;

  2. clientLoader.hydrate = benar;

FYI saya telah memilih contoh ini daripada penghala React v7.

Mari pecahkan perbezaan dengan penjelasan dan contoh terperinci

  1. clientLoader.hydrate = benar sebagai const;

Pernyataan sebagai const dalam TypeScript ialah cara memberitahu pengkompil TypeScript untuk menganggap nilai sebagai jenis literalnya, bukannya jenis umum.
Dalam kes ini, benar sebagai const bermakna jenis hidrat akan menjadi benar literal dan bukan boolean. Ia pada asasnya mengunci nilai hidrat kepada benar secara khusus.

Contoh:

interface ClientLoader {
  hydrate: true;  // The type of hydrate is set to the literal value `true`
}

const clientLoader: ClientLoader = {
  hydrate: true as const,
};

clientLoader.hydrate = true; // This is valid

// clientLoader.hydrate = false; // Error: Type 'false' is not assignable to type 'true'
  • Dalam contoh di atas, clientLoader.hydrate secara khusus ditaip sebagai benar. Anda tidak boleh menetapkan sebarang nilai selain daripada benar kepada terhidrat kerana penegasan sebagai const.

  • Tugasan jenis ini berguna apabila anda ingin menguatkuasakan kebolehubahan untuk sifat tertentu.

  1. clientLoader.hydrate = benar;

Tanpa penegasan sebagai const, TypeScript akan membuat kesimpulan jenis hidrat sebagai boolean. Ini bermakna hidrat boleh diberikan sebarang nilai boolean (benar atau palsu).

Contoh:

interface ClientLoader {
  hydrate: boolean;  // The type of hydrate is set to `boolean`
}

const clientLoader: ClientLoader = {
  hydrate: true,
};

clientLoader.hydrate = true;  // This is valid
clientLoader.hydrate = false; // This is also valid
  • Dalam kes ini, memandangkan hidrat ditaip sebagai boolean, anda boleh menetapkan benar atau palsu kepadanya.

  • Ia memberikan fleksibiliti untuk bertukar antara kedua-dua benar dan salah.

Feature clientLoader.hydrate = true as const; clientLoader.hydrate = true;
Type of hydrate true (literal type) boolean (general type)
Flexibility Can only be true Can be true or false
Use Case When you want the property to be strictly true and not allow changes When the property can hold any boolean value
Type Inference The type of hydrate is narrowed to true The type of hydrate is inferred as boolean

Mengapa Gunakan sebagai const?

  1. Menguatkuasakan Ketidakbolehubahan: kerana const mengunci nilai supaya ia tidak boleh ditukar kepada sesuatu yang lain. Ini amat berguna apabila anda ingin memastikan bahawa nilai tertentu sentiasa sama sepanjang program.

  2. Jenis Tersurat untuk Kesatuan Terdiskriminasi: Apabila bekerja dengan kesatuan sekerja yang didiskriminasi, kerana const membenarkan anda mencipta kes tertentu berdasarkan jenis tersurat, seperti yang ditunjukkan di bawah:

interface ClientLoader {
  hydrate: true;  // The type of hydrate is set to the literal value `true`
}

const clientLoader: ClientLoader = {
  hydrate: true as const,
};

clientLoader.hydrate = true; // This is valid

// clientLoader.hydrate = false; // Error: Type 'false' is not assignable to type 'true'

Kesimpulan

  1. Gunakan sebagai const apabila anda ingin menetapkan nilai literal tertentu pada harta dan menguatkuasakan bahawa nilai itu kekal.

  2. Gunakan tugasan biasa (benar, palsu, dsb.) apabila anda mahu membenarkan harta menerima nilai boolean yang berbeza atau apabila nilai tepat tidak perlu dihadkan.

Ini menjadikan sebagai const alat yang berguna untuk menaip yang lebih tepat dan menguatkuasakan kekangan nilai yang lebih ketat dalam kod TypeScript anda.

Atas ialah kandungan terperinci Menguasai Jenis Literal dalam TypeScript: true sebagai const vs true. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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