Typescriptで数値から文字列にキャストするための最良の方法は(もしあれば)どれですか?
var page_number:number = 3;
window.location.hash = page_number;
この場合、コンパイラはエラーをスローします。
型 'number'は型 'string'に代入できません
location.hash
は文字列なので。
window.location.hash = ""+page_number; //casting using "" literal
window.location.hash = String(number); //casting creating using the String() function
それではどちらの方法が良いですか?
「キャスティング」は変換とは異なります。この場合、window.location.hash
は数値を文字列に自動変換します。ただし、TypeScriptのコンパイルエラーを回避するために、文字列変換を自分で行うことができます。
window.location.hash = ""+page_number;
window.location.hash = String(page_number);
page_number
がnull
またはundefined
のときにエラーをスローしたくない場合は、これらの変換が理想的です。 page_number
がnull
またはundefined
の場合、page_number.toString()
およびpage_number.toLocaleString()
はスローされます。
変換するのではなくキャストするだけでよい場合は、TypeScriptで文字列にキャストする方法です。
window.location.hash = <string>page_number;
// or
window.location.hash = page_number as string;
<string>
またはas string
キャストアノテーションは、コンパイル時にpage_number
を文字列として扱うようにTypeScriptコンパイラに指示します。実行時に変換されません。
ただし、コンパイラは文字列に番号を代入できないと文句を言います。最初に<any>
にキャストし、次に<string>
にキャストする必要があります。
window.location.hash = <string><any>page_number;
// or
window.location.hash = page_number as any as string;
そのため、実行時およびコンパイル時に型を処理するだけで変換する方が簡単です。
window.location.hash = String(page_number);
(文字列キャスト問題を捕まえてくれた@RuslanPolutsyganに感謝します。)
toString
または toLocaleString
を使ってください。そう:
var page_number:number = 3;
window.location.hash = page_number.toLocaleString();
page_number
がnull
またはundefined
の場合、これらはエラーをスローします。それを望まないのなら、あなたは自分の状況に適した修正を選択することができます。
// 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();
TypeScriptでは次の構文も使用できます。バッククォート "` "に注意してください
window.location.hash = `${page_number}`
window.location.hashはstring
なので、次のようにします。
var page_number: number = 3;
window.location.hash = page_number.toString();
文字列を数値にキャストするには、 "+"記号を使用します。
window.location.hash = +page_number;