Casting nomor ke string dalam TypeScript


175

Yang merupakan cara terbaik (jika ada) untuk melemparkan dari nomor ke string dalam naskah?

var page_number:number = 3;
window.location.hash = page_number; 

Dalam hal ini kompiler melempar kesalahan:

Ketik 'angka' tidak dapat ditentukan untuk mengetik 'string'

Karena itu location.hashadalah string.

window.location.hash = ""+page_number; //casting using "" literal
window.location.hash = String(number); //casting creating using the String() function

Jadi metode mana yang lebih baik?

Jawaban:


294

"Casting" berbeda dari konversi. Dalam hal ini, window.location.hashakan secara otomatis mengkonversi angka menjadi string. Tetapi untuk menghindari kesalahan kompilasi TypeScript, Anda dapat melakukan konversi string sendiri:

window.location.hash = ""+page_number; 
window.location.hash = String(page_number); 

Konversi ini sangat ideal jika Anda tidak ingin kesalahan untuk dilempar saat page_numberini nullatau undefined. Sedangkan page_number.toString()dan page_number.toLocaleString()akan melemparkan saat page_numberini nullatau undefined.

Saat Anda hanya perlu melakukan cast, bukan convert, ini adalah cara cast ke string di TypeScript:

window.location.hash = <string>page_number; 
// or 
window.location.hash = page_number as string;

The <string>atau as stringpenjelasan cor memberitahu compiler naskah untuk memperlakukan page_numbersebagai string pada waktu kompilasi; itu tidak mengkonversi pada saat dijalankan.

Namun, kompiler akan mengeluh bahwa Anda tidak dapat menetapkan nomor ke string. Anda harus terlebih dahulu dilemparkan ke <any>, kemudian ke <string>:

window.location.hash = <string><any>page_number;
// or
window.location.hash = page_number as any as string;

Jadi lebih mudah untuk hanya mengonversi, yang menangani jenis pada waktu berjalan dan waktu kompilasi:

window.location.hash = String(page_number); 

(Terima kasih kepada @RuslanPolutsygan karena menangkap masalah casting string-number.)


1
Hati-hati, jika page_numberadalah nullini akan mengatur window.location.hashuntuk * string "null". (Saya lebih suka kesalahan: D).
Jeroen

Jika Anda tidak ingin kompiler mengeluh, katakan sajawindow.location.hash = <any>page_number;
Mouneer

1
Menggunakan konversi (mis. String(page_number)) Daripada casting diperlukan ketika Anda ingin menggunakan Stringmetode apa pun , seperti toLowerCase().
EricRobertBrewer

31

Gunakan saja toStringatau toLocaleStringsaya katakan. Begitu:

var page_number:number = 3;
window.location.hash = page_number.toLocaleString();

Ini melemparkan kesalahan jika page_numberini nullatau undefined. Jika tidak ingin, Anda dapat memilih perbaikan yang sesuai dengan situasi Anda:

// Fix 1:
window.location.hash = (page_number || 1).toLocaleString();

// Fix 2a:
window.location.hash = !page_number ? "1" page_number.toLocaleString();

// Fix 2b (allows page_number to be zero):
window.location.hash = (page_number !== 0 && !page_number) ? "1" page_number.toLocaleString();

Jangan gunakan toLocaleString untuk jumlah besar karena menambahkan koma seperti mata uang. Ini akan menghancurkan pengidentifikasi.
Obaid

7

Anda juga dapat menggunakan sintaks berikut dalam naskah. Perhatikan backtick "` "

window.location.hash = `${page_number}`

5

window.location.hash adalah string, jadi lakukan ini:

var page_number: number = 3;
window.location.hash = page_number.toString(); 

0

const page_number = 3;

window.location.hash = page_number as string; // Kesalahan

"Konversi tipe 'angka' ke tipe 'string' mungkin merupakan kesalahan karena tidak ada tipe yang cukup tumpang tindih dengan yang lain. Jika ini disengaja, ubah ekspresi menjadi 'tidak dikenal' terlebih dahulu." -> Anda akan mendapatkan kesalahan ini jika Anda mencoba mengetikkan nomor ramalan ke string. Jadi, pertama konversikan ke tidak dikenal dan kemudian ke string.

window.location.hash = (page_number as unknown) as string; // Jalan yang benar


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.