TypeScriptで数値を文字列にキャストする


175

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

それで、どちらの方法が良いですか?

回答:


294

「キャスティング」は変換とは異なります。この場合、window.location.hashは数値を文字列に自動変換します。ただし、TypeScriptコンパイルエラーを回避するために、文字列変換を自分で行うことができます。

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

これらの変換は、page_numberis nullまたはのときにエラーがスローされないようにする場合に最適ですundefined。一方page_number.toString()、またはのpage_number.toLocaleString()場合page_numberはスローされます。nullundefined

変換ではなくキャストのみが必要な場合、これはTypeScriptで文字列にキャストする方法です。

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

<string>またはas stringキャスト注釈は御馳走に活字体のコンパイラに伝えるpage_number、コンパイル時に文字列として。実行時に変換されません。

ただし、コンパイラは文字列に数値を割り当てることができないと不平を言うでしょう。最初ににキャストし<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に感謝します。)


1
慎重に、あればpage_numberあるnullこれが設定されますwindow.location.hash文字列*に"null"。(私はエラーを好む:D)。
Jeroen、2016

コンパイラに文句を言わせたくない場合は、次のように言ってくださいwindow.location.hash = <any>page_number;
Mouneer '29

1
使用して変換を(すなわち。String(page_number))のではなく、鋳造ご使用する際に必要となるStringように、メソッドをtoLowerCase()
EricRobertBrewer 2016年

31

ただ利用するtoStringか、toLocaleString私は言うでしょう。そう:

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

これらは、場合、エラーをスローpage_numberですnullundefined。あなたがそれを望まないならば、あなたはあなたの状況に適切な修正を選ぶことができます:

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

toLocaleStringは、通貨のようにカンマを追加するため、大きな数値には使用しないでください。識別子を破壊します。
Obaid

7

typescriptで次の構文を使用することもできます。バックティック "` "に注意してください

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

5

window.location.hashはなのでstring、次のようにします。

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

0

const page_number = 3;

window.location.hash = page_number as string; //エラー

「タイプ 'number'からタイプ 'string'への変換は、どちらのタイプも他と十分にオーバーラップしていないため、誤りである可能性があります。これが意図的なものである場合は、最初に式を 'unknown'に変換してください。->文字列に数値を型キャストしようとすると、このエラーが発生します。したがって、最初に不明に変換し、次に文字列に変換します。

window.location.hash =(page_number as unknown)as string; //正しい方法


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.