[英]What is the type assertion operator for in TypeScript?
該規范並沒有過多說明類型斷言運算符在 TypeScript 中的哪些方面可能會有所幫助。 我的代碼中不需要它。 所以我很好奇它應該解決什么樣的問題。 有任何想法嗎?
它有點像type casting
但是因為它沒有運行時支持(它只是一個編譯時斷言),TypeScript 選擇將它稱為“類型斷言”。 考慮這個例子:
var element1 = document.getElementById('canvas'); // Determined to be HTMLElement
element1.getContext('2d'); // ERROR as it is HTMLElement
// Determined to be canvas due to your assertion
var element2 = <HTMLCanvasElement>document.getElementById('canvas');
element2.getContext('2d'); // Valid
每當 typescript 類型推斷由於不兼容的推斷類型而阻止您分配東西時,您將需要它。
Typescript 類型斷言有兩種形式。 此處來自Typescript 手冊的示例。
tsx
括號語法(在tsx
文件中不起作用):let strLength: number = (<string>someValue).length;
as
類型斷言的語法(在ts
或tsx
):let strLength: number = (someValue as string).length;
類型斷言覆蓋了當前版本的 Typescript 的(有限的)類型推斷功能,如果您是正確的,這可能是一件好事,但也存在您的判斷不正確並且 TS 會相信您的風險。 如果您推斷的內容與 TS 推斷的內容之間可能存在不匹配,則 TS 仍然會猶豫不決,那么您可以更強烈地否決 TS 推斷, as unknown as string
。
我假設您是指函數參數后的: [type]
符號? 它似乎對最終的 .js 文件沒有影響,但是如果您通過編譯器運行 .ts 文件,如果它發現任何類型斷言參數的意外輸入類型,它將拋出錯誤。 希望能回答你的問題。
類型斷言的尖括號語法,例如:
let content: any = "這是一個堆棧溢出教程";
讓輸出:數字=(內容)。 長度;
讓 output1: number = (content as string)。 長度;
控制台日志(輸出);
在上面的例子中,我們有一個 any 類型的變量內容。 我們將這個變量的值賦給另一個名為 output 的變量。然而我們知道代碼是字符串類型,即使它被聲明為 any。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.