ความแตกต่างระหว่างการยืนยันประเภทและตัวดำเนินการʻas` ที่ใหม่กว่าใน TypeScript หรือไม่


146

มีความแตกต่างระหว่างสิ่งที่ข้อมูลจำเพาะ TypeScript เรียกการยืนยันประเภท:

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

และตัวดำเนินการที่ใหม่กว่า as :

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

ทั้งสองอย่างนี้มักใช้สำหรับการแคสต์แบบรวบรวมเวลา?

คำตอบ:


171

ความแตกต่างคือas Circleทำงานในไฟล์ TSX แต่<Circle>ขัดแย้งกับไวยากรณ์ JSX asได้รับการแนะนำด้วยเหตุนี้

ตัวอย่างเช่นรหัสต่อไปนี้ใน.tsxไฟล์:

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

จะส่งผลให้เกิดข้อผิดพลาดดังนี้

ข้อผิดพลาด TS17002: คาดว่าจะมีแท็กปิด JSX ที่สอดคล้องกันสำหรับ "Circle"

อย่างไรก็ตามas Circleจะทำงานได้ดี

ใช้as Circleตั้งแต่บัดนี้เป็นต้นไป เป็นไวยากรณ์ที่แนะนำ


39

จากหน้า Wiki : "มีอะไรใหม่ใน TypeScript [1.6]":

ใหม่.tsxนามสกุลไฟล์และasผู้ประกอบการ

TypeScript 1.6 แนะนำ.tsxนามสกุลไฟล์ใหม่ ส่วนขยายนี้ทำสองสิ่ง: เปิดใช้งาน JSX ภายในไฟล์ TypeScript และทำให้ตัวasดำเนินการใหม่เป็นวิธีเริ่มต้นในการแคสต์ (ลบความคลุมเครือระหว่างนิพจน์ JSX และตัวดำเนินการ Cast คำนำหน้า TypeScript) ตัวอย่างเช่น:

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

สองคนนี้ต่างกันไหม var x = foo as any; var x: any = foo;
yusung lee
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.