TL;あなたはそれをすることができますが、おそらくしたくないでしょう。文字列を数値として解析します。
タイプのアサーションは、少なくとも1つのタイプが他のタイプに割り当て可能な場合にのみ許可されます。あなたはスーパータイプに値を広げ、安全な「鋳造アップ」の方向は、(情報を捨てる)があります:
// safe
let h = "hello" as (string | number); // widening string to string|number
をとあります(あなたがサブタイプに値を狭める方向を、「ダウンキャスト」安全でありません
// unsafe but correct
let okay = h as "hello"; // narrowed string|number to string literal "hello"
// unsafe and incorrect
let notOkay = h as "goodbye"; // narrowed string|number to string literal "goodbye".
しかし、あなたが行うことができないこともない、一方が他方に割り当て可能である2つの無関係な種類の、間タイプのアサーションを行うです:)コンパイラが確認できない情報を追加すること
let s = "string";
s as number; // error
let n = 1;
n as string; // error
タイプシステムからのエスケープハッチであるany
を入力します。タイプany
は、他のすべてのタイプに割り当て可能であるとみなされます。 本当にの値が無関係なタイプであると主張したい場合は、any
を仲介者として使用できます。
n = s as any as number; // you're the boss
s = n as any as string; // you're the boss
だから、あなたがそれを行うことができます:これは、もちろん、非常に安全ではない
myAge = window.prompt('age?') as any as number; // bad idea
しかし、それをしないでください。 TypeScriptは、string
がnumber
ではないことを正しく警告しています。それは、彼らが期待するものだならば確かに、JavaScriptの機能の多くは、文字列を数値に強制変換されますが、JavaScriptの多くはがはそれをしない機能:
n = "3" as any as number;
console.log(n + 5); // 35, not 8!
をだから、できるように活字体を強制的に本当に悪い考えですあなたは愚かなことをする。あなたは数として文字列を解釈するようにしたい場合は、はそれを解析:
let myAge: number;
myAge = Number(window.prompt('age?')); // always a number, may be NaN
Number
関数は常にnumber
を返し、活字体がこれを知って、今、あなたと活字体の両方がコンパイル時に、満足していますおよびランタイム。 NaN
はnumber
であり、Number("hello")
のようなことをすればそれが得られることを覚えておいてください。だからmyAge
をnumber
とした後、数字で何かを行う前にisNaN()
でチェックしたいと思うかもしれません。
がんばろう!
あなたは 'myAge = + myAgeStr;'または 'myAge = parseInt(myAgeStr);' – Niladri
で標準のjavascript変換を試してみることができます。 – Niladri
like this fiddle https://www.typescriptlang.org/play/#src=let%20myAge%3A%20number%3B%0D%0Alet%20myAgeStr%3A%20string%3B%0D%0AmyAgeStr%20%3D%20window .prompt( '年齢%3F')%3B%20%0D%0AmyAge%20%3D%20%2BmyAgeStr%3B%20%0D%0Aconsole.log(myAge)%3B – Niladri