- TypeScript 基礎
- TypeScript - 首頁
- TypeScript - 路線圖
- TypeScript - 概述
- TypeScript - 環境設定
- TypeScript - 基本語法
- TypeScript vs. JavaScript
- TypeScript - 特性
- TypeScript - 變數
- TypeScript - let & const
- TypeScript - 運算子
- TypeScript 基本型別
- TypeScript - 型別
- TypeScript - 型別註解
- TypeScript - 型別推斷
- TypeScript - 數字
- TypeScript - 字串
- TypeScript - 布林值
- TypeScript - 陣列
- TypeScript - 元組
- TypeScript - 列舉
- TypeScript - Any
- TypeScript - Never
- TypeScript - 聯合型別
- TypeScript - 字面量型別
- TypeScript - 符號
- TypeScript - null vs. undefined
- TypeScript - 類型別名
- TypeScript 控制流
- TypeScript - 決策
- TypeScript - if 語句
- TypeScript - if else 語句
- TypeScript - 巢狀 if 語句
- TypeScript - switch 語句
- TypeScript - 迴圈
- TypeScript - for 迴圈
- TypeScript - while 迴圈
- TypeScript - do while 迴圈
- TypeScript 函式
- TypeScript - 函式
- TypeScript - 函式型別
- TypeScript - 可選引數
- TypeScript - 預設引數
- TypeScript - 匿名函式
- TypeScript - Function 建構函式
- TypeScript - rest 引數
- TypeScript - 引數解構
- TypeScript - 箭頭函式
- TypeScript 介面
- TypeScript - 介面
- TypeScript - 介面擴充套件
- TypeScript 類和物件
- TypeScript - 類
- TypeScript - 物件
- TypeScript - 訪問修飾符
- TypeScript - 只讀屬性
- TypeScript - 繼承
- TypeScript - 靜態方法和屬性
- TypeScript - 抽象類
- TypeScript - 存取器
- TypeScript - 鴨子型別
- TypeScript 高階型別
- TypeScript - 交叉型別
- TypeScript - 型別保護
- TypeScript - 型別斷言
- TypeScript 型別操作
- TypeScript - 從型別建立型別
- TypeScript - Keyof 型別運算子
- TypeScript - Typeof 型別運算子
- TypeScript - 索引訪問型別
- TypeScript - 條件型別
- TypeScript - 對映型別
- TypeScript - 模板字面量型別
- TypeScript 泛型
- TypeScript - 泛型
- TypeScript - 泛型約束
- TypeScript - 泛型介面
- TypeScript - 泛型類
- TypeScript 其他
- TypeScript - 三斜槓指令
- TypeScript - 名稱空間
- TypeScript - 模組
- TypeScript - 環境宣告
- TypeScript - 裝飾器
- TypeScript - 型別相容性
- TypeScript - Date 物件
- TypeScript - 迭代器和生成器
- TypeScript - Mixins
- TypeScript - 實用程式型別
- TypeScript - 裝箱和拆箱
- TypeScript - tsconfig.json
- 從 JavaScript 到 TypeScript
- TypeScript 有用資源
- TypeScript - 快速指南
- TypeScript - 有用資源
- TypeScript - 討論
TypeScript - 引數解構
在 TypeScript 中,引數解構是指將引數物件解包到單獨的引數變數中。例如,假設我們已經將包含多個屬性的物件作為任何函式的引數傳遞。在這種情況下,我們可以在引數中解構物件,並在單獨的變數中訪問物件的所需屬性。
但是,我們可以解構作為函式引數傳遞的物件屬性或陣列。此外,在解構引數時,我們必須使用型別註解在 TypeScript 中定義每個引數的型別。因此,對於初學者來說可能不太清晰。
語法
您可以遵循以下語法在 TypeScript 中進行引數解構。
function getObjValues({ key1, key2 }: { key1: string; key2: number }) {
// use key1 and key2 as a variable
}
// calling the function with an object
getObjValues({ key1: "Hello", key2: 20 });
在上述語法中,我們將引數作為函式傳遞。使用者可以看到我們如何在引數中解構每個物件值。
示例
現在,我們將檢視引數解構的各種示例,並學習它的不同用法。
示例 1
在下面的示例中,我們建立了 printObjValues() 函式,它將物件作為引數。我們正在解構物件並將物件的鍵值儲存在引數變數中。
此外,使用者可以看到我們如何在函式中使用引數值。
function printObjValues({ key1, key2 }: { key1: string; key2: number }) {
console.log("The value of key1 is " + key1);
console.log("The value of key2 is " + key2);
}
printObjValues({ key1: "Hello", key2: 20 });
printObjValues({ key1: "TypeScript", key2: 50 });
編譯後,它將生成以下 JavaScript 程式碼:
function printObjValues(_a) {
var key1 = _a.key1, key2 = _a.key2;
console.log("The value of key1 is " + key1);
console.log("The value of key2 is " + key2);
}
printObjValues({ key1: "Hello", key2: 20 });
printObjValues({ key1: "TypeScript", key2: 50 });
以上程式碼將產生以下輸出:
The value of key1 is Hello The value of key2 is 20 The value of key1 is TypeScript The value of key2 is 50
示例 2
在下面的示例中,我們正在引數變數中解構物件值,但我們也為引數變數分配了預設值。param2 的預設值為“default”。因此,如果我們沒有在引數物件中傳遞 param2 鍵值對,它將使用預設值,程式碼將無需任何錯誤即可執行。
此外,使用者可以看到我們使用了 '?' 使 param2 引數可選。
function getParams({
param1,
param2 = "default",
}: {
param1: boolean;
param2?: string;
}) {
console.log("The value of param1 is " + param1);
console.log("The value of param2 is " + param2);
}
getParams({ param1: true, param2: "value" });
getParams({ param1: false });
編譯後,它將生成以下 JavaScript 程式碼:
function getParams(_a) {
var param1 = _a.param1, _b = _a.param2, param2 = _b === void 0 ? "default" : _b;
console.log("The value of param1 is " + param1);
console.log("The value of param2 is " + param2);
}
getParams({ param1: true, param2: "value" });
getParams({ param1: false });
以上程式碼將產生以下輸出:
The value of param1 is true The value of param2 is value The value of param1 is false The value of param2 is default
示例 3
在此示例中,所有引數都是可選的。我們將包含所有鍵和預設值的預設物件分配給引數變數。因此,我們可以使用包含一個、兩個、三個或沒有鍵值對的引數物件。
使用者可以觀察到,我們透過將包含各種數量的鍵值對的物件作為引數來呼叫函式。
// Creating the function whose all parameters are optional and initializing them with default values.
function sample_function(
{
value1,
value2,
value3,
}: {
value1?: number;
value2?: number;
value3?: number;
} = { value1: 20, value2: 30, value3: 40 }
): number {
let sum = value1 + value2 + value3;
return sum;
}
console.log("The sum of default values is " + sample_function());
console.log(
"The sum of 10000, 20302, and value3 is " +
sample_function({ value1: 10000, value2: 20302 })
);
console.log(
"The sum of 10, 20, and 25 is " +
sample_function({ value1: 10, value2: 20, value3: 25 })
);
編譯後,它將生成以下 JavaScript 程式碼:
// Creating the function whose all parameters are optional and initializing them with default values.
function sample_function(_a) {
var _b = _a === void 0 ? { value1: 20, value2: 30, value3: 40 } :
_a, value1 = _b.value1, value2 = _b.value2, value3 = _b.value3;
var sum = value1 + value2 + value3;
return sum;
}
console.log("The sum of default values is " + sample_function());
console.log("The sum of 10000, 20302, and value3 is " + sample_function({ value1: 10000, value2: 20302 }));
console.log("The sum of 10, 20, and 25 is " + sample_function({ value1: 10, value2: 20, value3: 25 }));
以上程式碼將產生以下輸出:
The sum of default values is 90 The sum of 10000, 20302, and value3 is NaN The sum of 10, 20, and 25 is 55
示例 4
在此示例中,我們將 lock 型別的物件作為函式引數傳遞。lock 介面包含 lock_id 和 isDurable 屬性。我們建立了 'lockObj' 並將其作為 callLockFunc() 函式的引數傳遞。
在 callLockFunc() 函式中,我們已在變數中解構引數物件並列印它們以顯示其值。
interface lock {
lock_id?: string;
isDurable?: boolean;
}
let lockObj: lock = {
lock_id: "4523fdr0",
isDurable: true,
};
function callLockFunc(obj: lock) {
let { lock_id, isDurable } = obj;
console.log("The destructured lock_id value is " + lock_id);
console.log("The destructured isDurable value is " + isDurable);
}
callLockFunc(lockObj);
lockObj.isDurable = false;
lockObj.lock_id = "eredf";
callLockFunc(lockObj);
編譯後,它將生成以下 JavaScript 程式碼:
var lockObj = {
lock_id: "4523fdr0",
isDurable: true
};
function callLockFunc(obj) {
var lock_id = obj.lock_id, isDurable = obj.isDurable;
console.log("The destructured lock_id value is " + lock_id);
console.log("The destructured isDurable value is " + isDurable);
}
callLockFunc(lockObj);
lockObj.isDurable = false;
lockObj.lock_id = "eredf";
callLockFunc(lockObj);
以上程式碼將產生以下輸出:
The destructured lock_id value is 4523fdr0 The destructured isDurable value is true The destructured lock_id value is eredf The destructured isDurable value is false