TypeScript: Masalah Kelebihan Fungsi |. Oleh Adrien Gautier |

 – Beragampengetahuan
2 mins read

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 mode Parameternya adalah "string" atau "number"
  • jika mode Ya "string" Jenis pengembaliannya adalah string
  • 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 TMode tidak mempersempit ruang lingkupnya mode === "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

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *