TypeScript: Masalah Kelebihan Fungsi |. Oleh Adrien Gautier | – Beragampengetahuan
Tujuan utama dari kelebihan fungsi adalah untuk menyesuaikan tipe pengembalian berdasarkan parameter masukan. Kita dapat mencapai perilaku serupa menggunakan sintaksis tipe kondisional sebagai berikut:
function random<TMode extends "string" | "number">(
mode: TMode
): TMode extends "string" ? string : number
if (mode === "string")
return uuidv4();
return Math.random();
Dengan sintaks di atas, kami menegaskan:
- ini
modeParameternya adalah"string"atau"number" - jika
modeYa"string"Jenis pengembaliannya adalahstring - Kalau tidak, tipe pengembaliannya adalah
number
Mirip dengan kelebihan beban fungsi, tipe kembalian disimpulkan dengan benar berdasarkan nilai input:
const randomString: string = random("string");const randomNumber: number = random("number");
Contents
Ini menangani parameter yang tidak ditentukan…
Berbeda dengan kelebihan beban fungsi, Izinkan nilai masukan yang tidak pasti dan disebarkan ke tipe yang dikembalikan seperti yang diharapkan:
const randomValue: string | number = random(mode as "string" | "number");
…tetapi gagal membatasi penerapannya
Sayangnya, kabar baik berakhir di sini. Untuk memenuhi tipe pengembalian bersyarat, kita sebenarnya perlu memperkenalkan tipe tersebut any:
function random<TMode extends "string" | "number">(
mode: TMode
): TMode extends "string" ? string : number
if (mode === "string")
return uuidv4() as any;
return Math.random() as any;
TypeScript adalah tidak dapat disimpulkan Ketika sebuah string harus dikembalikan atau number Harus dikembalikan. Lebih buruk lagi, tidak juga string juga bukan numberDapat ditetapkan ke tipe pengembalian bersyarat. Cara terbersih yang saya temukan adalah dengan menggunakan alias seperti ini:
type Return<TMode extends "string" | "number"> = TMode extends "string"
? string
: number;function random<TMode extends "string" | "number">(
mode: TMode
): Return<TMode>
if (mode === "string")
return uuidv4() as Return<TMode>;
return Math.random() as Return<TMode>;
Namun meski begitu, hal itu tidak mencegah pengembalian string mengganti number,dan sebaliknya.
Mengapa
TModetidak mempersempit ruang lingkupnyamode === "string"Status kesehatan? Ini karena kami mempersempit jenisnya berhubungan dengan sebuah objek, bukan tipe (Alias)diri.
rencana pengembangan website
metode pengembangan website
jelaskan beberapa rencana untuk pengembangan website, proses pengembangan website, kekuatan dan kelemahan bisnis pengembangan website
, jasa pengembangan website, tahap pengembangan website, biaya pengembangan website
#TypeScript #Masalah #Kelebihan #Fungsi #Oleh #Adrien #Gautier