2017-01-20 14 views
1

Typescriptには、オブジェクトをキャストする2通りの方法があります。<type>変数と変数の型がTypescriptの型と異なる点

<type>variable 

variable as type 

これらの両方は、キャストオブジェクトがタイプだ保持しますので、恒久的な(コンパイル時に)鋳造のようです。例:

let number: number = 2; 

let string1 = <string>number; 
let string2 = number as string; 

string1; // -> the type is string 
string1; // -> the type is string 

質問:この2つの違いは何ですか? Basaratアリサイードの本、活字体ディープダイブから引用したよう

答えて

2

2つの違いは何ですか?

これらは同一です。 x as Yは、後で<Y>xの代替構文として作成され、TSXファイルの非あいまいな型アサーションを有効にします(<Y>xはJSX式として認識されるため)。 x as Yの構文が推奨されます。


ただし、ここでは誤解があります。これは型キャストではなく、コンパイル時の型 - アサーションです。両者の違いは、最高の実行時に何が起こるかによって証明されています

let number: number = 2; 
let string = number as string; 

console.log(typeof string); // "number" 

活字体は、自動タイプキャストおよび型チェックを行うためのランタイム・フレームワークを持っていない、これは設計目標です。 (真剣に?)

+0

ええ、私はコンパイル時に間違った言い回しを知っています。 – NoNameProvided

2

as foo<foo>

もともと添加し、構文が<foo>ました。今あなたがちょうど ためのfooとして使用することをお勧めしますのでvar foo = <string>bar; </string> : JSXで<foo>スタイルのアサーションを使用している場合しかし、言語の文法におけるあいまいさがある

var foo: any 
var bar = <string> foo; // bar is now of type "string" 

:これは以下の を実証しています一貫性。

TypeScript Deep Dive

3

彼らは両方とも同じです。 foo as文字列構文が、JSX構文(Reactでよく使用される)とのあいまいさを避けるために導入されました。

詳しい情報here

関連する問題