Mari kita bincangkan tentang perbezaan antara tidak diketahui dan mana-mana dalam TypeScript

青灯夜游
Lepaskan: 2021-10-27 11:14:49
ke hadapan
2165 orang telah melayarinya

Artikel ini akan membantu anda membandingkan yang tidak diketahui dan mana-mana dalam TypeScript dan bercakap tentang perbezaan antara yang tidak diketahui dan mana-mana saya harap ia akan membantu anda!

Mari kita bincangkan tentang perbezaan antara tidak diketahui dan mana-mana dalam TypeScript

Kami tahu bahawa pembolehubah jenis any boleh ditugaskan kepada sebarang nilai.

let myVar: any = 0;
myVar = '1';
myVar = false;
Salin selepas log masuk

TypeScript Panduan tidak menggalakkan penggunaan any, kerana menggunakannya akan kehilangan sekatan jenis-dan keperluan untuk sekatan jenis juga merupakan salah satu sebab mengapa kami pilih TypeScript, jadi ia agak Melangkah ke arah yang bertentangan.

TypeScript (3.0 dan ke atas) juga menyediakan jenis istimewa any serupa dengan unknown. Kita juga boleh menetapkan sebarang nilai kepada pembolehubah jenis unknown:

let myVar: unknown = 0;
myVar = '1';
myVar = false;
Salin selepas log masuk

Sekarang ada soalan, apakah perbezaan antara any dan unknown?

1 tidak diketahui vs mana-mana

Untuk lebih memahami perbezaan antara unknown dan any, mula-mula kita mulakan dengan menulis unik Fungsi parameter bermula .

Kami menetapkan satu-satunya parameter invokeAnything() kepada jenis any

function invokeAnything(callback: any) {
  callback();
}

invokeAnything(1); // throws "TypeError: callback is not a function"
Salin selepas log masuk

Oleh kerana parameter callback adalah daripada sebarang jenis, pernyataan callback() tidak akan mencetuskan ralat jenis. Kita boleh melakukan apa sahaja dengan pembolehubah jenis any.

Tetapi berjalan akan menimbulkan ralat masa jalan:TypeError: callback is not a function. 1 ialah nombor dan tidak boleh dipanggil sebagai fungsi TypeScript tidak melindungi kod untuk mengelakkan ralat ini

bukan sahaja membenarkan fungsi invokeAnything() untuk menerima parameter apa-apa jenis, tetapi juga memaksa jenis. menyemak parameter untuk mengelakkan perkara di atas Apakah yang perlu saya lakukan jika ralat ini dilaporkan?

Tolong unknown abang kawal padang.

Seperti any, pembolehubah unknown menerima sebarang nilai. Tetapi TypeScript menguatkuasakan semakan taip apabila cuba menggunakan pembolehubah unknown. Bukankah ini yang kita mahukan?

function invokeAnything(callback: unknown) {
  callback();
  // Object is of type 'unknown'
}

invokeAnything(1);
Salin selepas log masuk

Oleh kerana hujah callback adalah daripada jenis unknown, pernyataan callback() mempunyai ralat jenis: Object is of type 'unknown'. Bertentangan dengan any, TypeScript melindungi kami daripada memanggil sesuatu yang mungkin bukan fungsi.

Sebelum menggunakan pembolehubah jenis unknown, anda perlu menaip semak. Dalam contoh ini, kita hanya perlu menyemak sama ada callback ialah jenis fungsi.

function invokeAnything(callback: unknown) {
  if (typeof callback === 'function') {
    callback();
  }
}

invokeAnything(1);
Salin selepas log masuk

2. Model mental yang tidak diketahui dan mana-mana

Sejujurnya, semasa saya belajar, sukar untuk saya faham unknown. Bagaimanakah ia berbeza daripada any kerana kedua-dua jenis menerima sebarang nilai

Berikut ialah peraturan yang membantu saya memahami perbezaan antara keduanya:

  • boleh diberikan apa sahaja kepada unknown taip, tetapi tiada operasi boleh dilakukan pada unknown tanpa pemeriksaan jenis atau penegasan taip
  • boleh menetapkan apa-apa kepada jenis any dan boleh melakukan sebarang operasi pada jenis any
  • .

Contoh di atas hanya menggambarkan persamaan dan perbezaan antara unknown dan `mana-mana.

unknown Contoh:

function invokeAnything(callback: unknown) {
  // 可以将任何东西赋给 `unknown` 类型,
  // 但在进行类型检查或类型断言之前,不能对 `unknown` 进行操作
  if (typeof callback === 'function') {
    callback();
  }
}

invokeAnything(1); // You can assign anything to `unknown` type
Salin selepas log masuk

Taip semak typeof callback === 'function', semak sama ada callback ialah fungsi, jika ya, ia boleh dipanggil.

any Contoh:

function invokeAnything(callback: any) {
  // 可以对 `any` 类型执行任何操作
  callback();
}

invokeAnything(1); // 可以把任何东西分配给`any`类型
Salin selepas log masuk

Jika callback ialah any, TypeScript tidak akan memaksa pernyataan callback() untuk melakukan sebarang semakan jenis.

3. Ringkasan

unknown dan any ialah 2 jenis istimewa yang boleh menyimpan sebarang nilai.

Adalah disyorkan untuk menggunakan unknown dan bukannya any kerana ia memberikan lebih banyak keselamatan jenis - jika anda ingin mengendalikan unknown, anda mesti menggunakan penegasan jenis atau sempitkan kepada jenis tertentu.

Untuk lebih banyak pengetahuan berkaitan pengaturcaraan, sila lawati: Video Pengaturcaraan! !

Atas ialah kandungan terperinci Mari kita bincangkan tentang perbezaan antara tidak diketahui dan mana-mana dalam TypeScript. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:segmentfault.com
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