Catatan kosong pada JavaScript dan TypeScript

Jika, sebelum Anda tertarik pada JavaScript, Anda menulis dalam bahasa tradisional dengan ketikan yang kuat, maka Anda mungkin akrab dengan konsep void . Ini adalah tipe yang penggunaannya memberi tahu programmer bahwa fungsi dan metode yang sesuai tidak mengembalikan apa pun ketika dipanggil.



Entitas void juga tersedia dalam JavaScript dan TypeScript. Di JS, ini adalah operator. Dalam TS, ini adalah tipe data primitif. Dan di sana-sini, void tidak berperilaku seperti yang diharapkan oleh banyak orang yang menemukan void dalam bahasa lain.

Pernyataan JavaScript batal


Dalam JavaScript, operator void mengevaluasi ekspresi yang diberikan padanya. Pada saat yang sama, tidak peduli ekspresi mana yang dievaluasi, void selalu mengembalikan yang undefined .

 let i = void 2; // i === undefined 

Mengapa kita membutuhkan operator seperti itu?
Pertama, harus dicatat bahwa pada tahun-tahun awal pemrograman JS, pengembang dapat mendefinisikan kembali undefined dan menulis beberapa nilai untuk itu. Tetapi void selalu mengembalikan nilai sebenarnya dari undefined .

Kedua, menggunakan operator void adalah cara yang menarik untuk bekerja dengan fungsi yang langsung dipanggil:

 void function() {  console.log('What') }() 

Dan semua ini - tanpa polusi namespace global:

 void function aRecursion(i) {  if(i > 0) {    console.log(i--)    aRecursion(i)  } }(3) console.log(typeof aRecursion) // undefined 

Karena operator void selalu mengembalikan undefined dan selalu mengevaluasi ekspresi yang dikirimkan kepadanya, kami memiliki cara yang sangat ekspresif untuk kembali dari fungsi tanpa mengembalikan beberapa nilai, tetapi dengan panggilan, misalnya, beberapa panggilan balik:

 //  -  undefined      function middleware(nextCallback) {  if(conditionApplies()) {    return void nextCallback();  } } 

Ini mengarahkan kita ke cara paling penting untuk menggunakan void . Operator ini adalah semacam aplikasi "pos jaga". Jika fungsi tertentu harus selalu kembali undefined , ini dapat dicapai dengan menggunakan operator void .

 button.onclick = () => void doSomething(); 

Membatalkan tipe data dalam TypeScript


Ketik void di TypeScript bisa disebut sesuatu seperti kebalikan dari type any . Fungsi dalam JavaScript selalu mengembalikan sesuatu. Ini bisa berupa nilai yang ditetapkan oleh pemrogram atau undefined :

 function iHaveNoReturnValue(i) {  console.log(i) } //  undefined 

Karena fungsi JavaScript, yang darinya tidak ada yang dikembalikan secara eksplisit, selalu kembali undefined , void di TypeScript adalah tipe yang tepat untuk memberi tahu pengembang bahwa fungsi tersebut mengembalikan undefined :

 declare function iHaveNoReturnValue(i: number): void 

Entitas void dalam bentuk tipe juga dapat digunakan untuk parameter dan deklarasi variabel lainnya. Satu-satunya nilai yang selalu dapat diteruskan ke parameter void tidak undefined .

 declare function iTakeNoParameters(x: void): void iTakeNoParameters() //  iTakeNoParameters(undefined) //  iTakeNoParameters(void 2) //  

Akibatnya, ternyata di TS tipe yang void dan undefined adalah hal yang hampir sama. Tetapi ada satu perbedaan kecil di antara mereka, yang, pada kenyataannya, sangat penting. Jenis void dikembalikan dapat diganti dengan jenis lain, yang memungkinkan Anda menerapkan pola lanjut untuk bekerja dengan panggilan balik.

 function doSomething(callback: () => void) {  let c = callback() // callback   undefined  // c -  undefined } //     function aNumberCallback(): number {  return 2; } // ;    doSometing doSomething(aNumberCallback) 

Pengembang mengharapkan desain seperti itu, yang sering digunakan dalam aplikasi JS, untuk melakukan hal itu. Berikut adalah materi tentang topik ini.

Jika Anda ingin fungsi hanya menerima fungsi yang mengembalikan undefined , Anda dapat mengubah metode tanda tangan sesuai:

 //  // function doSomething(callback: () => void) { //  function doSomething(callback: () => undefined) { /* ... */ } function aNumberCallback(): number { return 2; } //  -    doSomething(aNumberCallback) 

Ringkasan


Operator void dalam JavaScript dan tipe data void dalam TypeScript adalah entitas yang cukup sederhana. Kisaran situasi di mana mereka berlaku terbatas. Namun, perlu dicatat bahwa programmer yang menggunakannya, kemungkinan besar, tidak akan menemui masalah ketika bekerja dengan mereka.

Pembaca yang budiman! Apakah Anda menggunakan void di JS dan TS?


Source: https://habr.com/ru/post/id468229/


All Articles