TypeScript'te bir dizeye sayı yayınlama


175

Typcript'te sayıdan dizeye yayın yapmanın en iyi yolu hangisi?

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

Bu durumda derleyici hatayı atar:

'Number' türü, 'string' türüne atanamaz

Çünkü location.hashbir dizedir.

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

Peki hangi yöntem daha iyi?

Yanıtlar:


294

"Döküm" dönüşümden farklıdır. Bu durumda, window.location.hashbir sayıyı otomatik olarak bir dizeye dönüştürür. Ancak bir TypeScript derleme hatasını önlemek için dize dönüşümünü kendiniz yapabilirsiniz:

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

Eğer bir hata atılmasına istemiyorsanız Bu dönüşümler idealdir page_numberolduğu nullveya undefined. Oysa page_number.toString()ve page_number.toLocaleString()ne zaman atacak page_numberolan nullveya undefined.

Dönüştürmemeniz için yalnızca yayınlamanız gerektiğinde, TypeScript'te bir dizeye şu şekilde yayınlanır:

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

<string>Veya as stringdökme ek açıklamalar tedavi için typescript derleyici anlatmakpage_number derleme zamanında bir dize olarak; çalışma zamanında dönüştürülmez.

Ancak, derleyici bir dizeye sayı atayamayacağınızdan şikayet edecektir. Önce yayın yapmalısın <any>, sonra<string> :

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

Bu nedenle, türü çalışma zamanında ve derleme zamanında işleyen dönüştürmek daha kolaydır:

window.location.hash = String(page_number); 

(Dize numarası döküm sorununu yakaladığı için @RuslanPolutsygan'a teşekkürler.)


1
Dikkatli, eğer page_numberolduğunu nullbu ayarlar window.location.hashdize * için "null". (Bir hatayı tercih ederim: D).
Jeroen

Derleyicinin şikayet etmesini istemiyorsanız sadece söyleyinwindow.location.hash = <any>page_number;
Mouneer

1
Gibi herhangi bir yöntemi kullanmak istediğinizde döküm yerine dönüşüm (yani. String(page_number)) Kullanmak gereklidir . StringtoLowerCase()
EricRobertBrewer

31

Sadece kullan, toStringyoksa toLocaleStringsöylerdim. Yani:

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

Bunlar page_number, nullveya durumunda bir hata atar undefined. Eğer istemiyorsanız, durumunuza uygun düzeltmeyi seçebilirsiniz:

// 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();

Bir para birimi gibi virgül eklediğinden, toLocaleString öğesini büyük sayılar için kullanmayın. Tanımlayıcıları yok edecektir.
Obaid

7

Ayrıca, daktiloda aşağıdaki sözdizimini kullanabilirsiniz. "" "Geridönüşüne dikkat edin

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

5

window.location.hash bir string, bu yüzden şunu yapın:

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

0

sabit sayfa_sayısı = 3;

window.location.hash = dize olarak sayfa_sayısı; // Hata

"'Number' türünün 'string' türüne dönüştürülmesi bir hata olabilir, çünkü her iki tür de diğeriyle yeterince örtüşmez. Bu kasıtlıysa, önce" bilinmeyen "ifadesini dönüştürün." -> Sayı dizeye yazmaya çalışırsanız bu hatayı alırsınız. Bu yüzden önce bilinmeyene, sonra dizgiye dönüştürün.

window.location.hash = (bilinmeyen sayfa_sayısı) dize olarak; // Doğru yol


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.