TypeScript中的型別斷言是什麼?


型別斷言是TypeScript中一種機制,用於告知編譯器變數的型別。如果TypeScript發現賦值錯誤,我們可以使用型別斷言來覆蓋型別。我們必須確定自己是正確的,因為當我們使用型別斷言時,賦值總是合法的。如果不是,我們的程式可能無法正常執行。

宣告性地告知編譯器我們打算將專案視為不同型別被稱為型別斷言。使用它,我們可以將任何型別視為數字或將數字視為字串。從JavaScript遷移到TypeScript時,經常使用型別斷言。

型別斷言的功能類似於型別轉換,但與C#和Java不同,它不執行型別驗證或資料重排。型別轉換提供執行時支援,而型別斷言不影響執行時。型別斷言僅是編譯時構造,用於向編譯器提供關於我們希望如何檢查程式碼的指示。

在本教程中,我們將學習如何使用型別斷言來告訴編譯器將值視為指定型別。

如何進行型別斷言?

型別斷言是一種TypeScript技術,它告訴編譯器變數的型別。雖然型別斷言不會重新建立程式碼,但型別轉換會。您可以使用型別斷言告訴編譯器不要推斷值的型別。我們使用型別斷言將變數從一種型別轉換為另一種型別,例如將any轉換為數字。

要進行型別斷言,我們可以使用“<>”運算子或“as”運算子。型別轉換提供執行時支援,而型別斷言對執行時沒有影響。

在TypeScript中執行型別斷言有三種方法:

  • 使用“as”運算子

  • 使用“<>”運算子

  • 使用物件

使用“as”運算子進行型別斷言

TypeScript中的“as”關鍵字提供了一種顯示型別斷言的方法。

語法

let variable_any: any = 123
let variable_number: number = variable_any as number

在上面的語法中,我們對任何型別的變數使用了“as”關鍵字進行型別斷言。

示例

在下面的示例中,我們使用“as”運算子進行型別斷言。我們使用了一個未知型別變數,其值為“Tutorialspoint”。我們使用“as”關鍵字告訴編譯器將變數視為字串,並使用了字串的length屬性。

let variable_unknown: unknown = "Tutorialspoint";
console.log("variable_unknown value is: ", variable_unknown);
let variable_number: number = (variable_unknown as string).length;
console.log("Length of variable_unknown: ", variable_number);

編譯後,它將生成以下JavaScript程式碼:

var variable_unknown = "Tutorialspoint";
console.log("variable_unknown value is: ", variable_unknown);
var variable_number = variable_unknown.length;
console.log("Length of variable_unknown: ", variable_number);

輸出

上面的程式碼將產生以下輸出:

variable_unknown value is: Tutorialspoint
Length of variable_unknown: 14

使用“<>”運算子進行型別斷言

“<>”運算子是另一種在TypeScript中執行型別斷言的方法。

語法

let variable_any: any = 123
let variable_number: number = <number> variable_any

在上面的語法中,我們對任何型別的變數使用了“<>”運算子進行型別斷言。

示例

在下面的示例中,我們使用“<>”運算子進行型別斷言。我們使用了一個未知型別變數,其值為12345。我們使用“<>”關鍵字告訴編譯器將變數視為數字,並將其儲存在另一個數字型別變數中。我們還檢查了第二個變數的型別以驗證型別。

let my_number: unknown = 12345
console.log('my_number value is: ', my_number)
let num: number = <number>my_number
console.log('typeof num is: ', typeof num)

編譯後,它將生成以下JavaScript程式碼:

var my_number = 12345;
console.log('my_number value is: ', my_number);
var num = my_number;
console.log('typeof num is: ', typeof num);

輸出

上面的程式碼將產生以下輸出:

my_number value is: 12345
typeof num is: number

使用“Object”進行型別斷言

與“as”和“<>”運算子不同,物件是另一種執行型別斷言的方法;物件可以一次用於多個型別斷言。

語法

interface info {
   name: string,
   value: string
}
let my_obj = <info> { name: 'ABC', value: 'abc'}

在上面的語法中,我們使用物件執行型別斷言。

示例

在下面的示例中,我們使用物件進行型別斷言。我們使用了一個物件,並將每個鍵設定為單獨的型別,因此每當使用者向其中新增一些值時,它將自動成為給定的值型別或丟擲錯誤。my_obj 使用名為 info 的介面包含型別,我們還使用 console.log(my_obj) 來檢視實際結果。

interface info {
   name: string
   value: string
}
let my_obj = <info>{}
my_obj.name = 'Tutorialspoint'
my_obj.value = 'typescript'
console.log(my_obj)

編譯後,它將生成以下JavaScript程式碼:

var my_obj = {};
my_obj.name = 'Tutorialspoint';
my_obj.value = 'typescript';
console.log(my_obj);

輸出

上面的程式碼將產生以下輸出:

{ name: 'Tutorialspoint', value: 'typescript' }

更新於:2023年1月3日

5K+ 次瀏覽

啟動你的職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.