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?

Ma Jerez
sumber

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.)

Robert Penner
sumber
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();
Jeroen
sumber
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}`
Nehal Damania
sumber
5

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

var page_number: number = 3;
window.location.hash = page_number.toString(); 
raneshu
sumber
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

Anant Raj
sumber
-4

Gunakan simbol "+" untuk memberikan string ke angka.

window.location.hash = +page_number;
Bettaibi Nidhal
sumber
4
+dilemparkan ke nomor
doup
1
Perlu melemparkan nomor ke sebuah string
Nick Gallimore