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!
Kami tahu bahawa pembolehubah jenis any
boleh ditugaskan kepada sebarang nilai.
let myVar: any = 0; myVar = '1'; myVar = false;
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;
Sekarang ada soalan, apakah perbezaan antara any
dan unknown
?
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"
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);
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);
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:
unknown
taip, tetapi tiada operasi boleh dilakukan pada unknown
tanpa pemeriksaan jenis atau penegasan taip 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
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`类型
Jika callback
ialah any
, TypeScript tidak akan memaksa pernyataan callback()
untuk melakukan sebarang semakan jenis.
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!