Adakah perbedaan antara pernyataan jenis dan operator `as` yang lebih baru di TypeScript?

143

Apakah ada perbedaan antara apa yang disebut spec TypeScript pernyataan jenis:

var circle = <Circle> createShape("circle");

Dan operator yang lebih baru as :

var circle = createShape("circle") as Circle;

Keduanya biasanya digunakan untuk casting waktu kompilasi?

mk.
sumber

Jawaban:

168

Perbedaannya adalah yang as Circleberfungsi dalam file TSX, tetapi <Circle>bertentangan dengan sintaks JSX. asdiperkenalkan karena alasan ini.

Misalnya, kode berikut dalam .tsxfile:

var circle = <Circle> createShape("circle");

Akan menghasilkan kesalahan berikut:

error TS17002: Tag penutup JSX terkait yang diharapkan untuk 'Circle'.

Namun, as Circleakan berfungsi dengan baik.

Gunakan as Circlemulai sekarang. Ini sintaks yang disarankan .

David Sherret
sumber
39

Dari halaman Wiki : "Apa yang baru di TypeScript [1.6]":

.tsxEkstensi dan asoperator file baru

TypeScript 1.6 memperkenalkan .tsxekstensi file baru . Ekstensi ini melakukan dua hal: itu memungkinkan JSX di dalam file TypeScript, dan itu membuat asoperator baru cara baku untuk membuang (menghapus setiap ambiguitas antara ekspresi JSX dan operator cast awalan TypeScript). Sebagai contoh:

var x = <any> foo; 
// is equivalent to:
var x = foo as any;
Martin Vseticka
sumber