Có sự khác biệt nào giữa các xác nhận kiểu và toán tử `as` mới hơn trong TypeScript không?


142

Có sự khác biệt nào giữa những gì đặc tả TypeScript gọi là xác nhận kiểu:

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

Và toán tử mới hơn as :

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

Cả hai thường được sử dụng để đúc thời gian biên dịch?

Câu trả lời:


167

Sự khác biệt là as Circlehoạt động trong các tệp TSX, nhưng <Circle>xung đột với cú pháp JSX. asđã được giới thiệu vì lý do này.

Ví dụ: đoạn mã sau trong một .tsxtệp:

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

Sẽ dẫn đến lỗi sau:

lỗi TS17002: Dự kiến ​​thẻ đóng JSX tương ứng cho 'Vòng tròn'.

Tuy nhiên, as Circlesẽ làm việc tốt.

Sử dụng as Circletừ bây giờ. Đó là cú pháp được đề xuất .


39

Từ trang Wiki : "Có gì mới trong TypeScript [1.6]":

Mới .tsxmở rộng tập tin và asđiều hành

TypeScript 1.6 giới thiệu một .tsxphần mở rộng tập tin mới . Phần mở rộng này thực hiện hai điều: nó cho phép JSX bên trong các tệp TypeScript và nó làm cho astoán tử mới trở thành cách mặc định (loại bỏ bất kỳ sự mơ hồ nào giữa các biểu thức JSX và toán tử đúc tiền tố TypeScript). Ví dụ:

var x = <any> foo; 
// is equivalent to:
var x = foo as any;
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.