簡體   English   中英

TypeScript 中的類型斷言運算符是什么?

[英]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 手冊的示例。

  1. 類型斷言的tsx括號語法(在tsx文件中不起作用):
let strLength: number = (<string>someValue).length;
  1. as類型斷言的語法(在tstsx ):
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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM