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' }
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP