
- 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 - 函式構造器
- 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 - Mixin
- TypeScript - 實用程式型別
- TypeScript - 裝箱和拆箱
- TypeScript - tsconfig.json
- 從 JavaScript 到 TypeScript
- TypeScript 有用資源
- TypeScript - 快速指南
- TypeScript - 有用資源
- TypeScript - 討論
TypeScript - 可選引數
TypeScript 中的可選引數允許我們在呼叫函式時指定函式引數是否可以提供。
當函式在呼叫時沒有為可選引數提供引數值時,可選引數的預設值為 undefined。因此,在函式體內部,我們需要處理可選引數。
可以透過在函式定義中在其名稱後面新增問號來使引數成為可選引數。
語法
在 TypeScript 中定義帶可選引數的函式的語法如下:
function functionName(para1:type1, para2?:type2): returnType{ // function body }
在上述語法中,函式functionName定義了兩個引數:para1 和 para2。第一個引數 para1 是必填引數,第二個引數 para2 是可選引數。
您可以定義一個具有多個可選引數的函式,但可選引數必須是最後一個引數。
JavaScript 預設支援可選引數,因為在 JavaScript 中,即使函式指定了引數,您也可以在不傳遞任何引數的情況下呼叫函式。
示例
讓我們透過一些 TypeScript 中的程式設計示例來了解函式可選引數。
示例:使用可選函式引數
在下面的示例中,函式 sum 接受三個引數:x、y 和 z。前兩個引數 x 和 y 是必填引數,第三個引數 z 是可選引數。
我們首先檢查可選引數是否為真。如果傳遞了,我們返回所有引數的和,否則我們只返回必填引數的和。請看示例。
function sum(x: number, y: number, z?: number): number { if (z){ return x + y + z; } else{ return x + y; } } console.log(sum(2,3)); console.log(sum(2,3,5));
編譯後,上述 TypeScript 程式碼將轉換為以下 JavaScript 程式碼。
function sum(x, y, z) { if (z) { return x + y + z; } else { return x + y; } } console.log(sum(2, 3)); console.log(sum(2, 3, 5));
上述示例程式碼的輸出如下:
5 10
請注意,當我們只用兩個引數(不帶可選引數)呼叫 sum 函式時,if 條件變為 false。可選引數(缺少引數)的預設值為 undefined。
示例:可選引數的型別守衛
我們可以使用型別守衛來檢查引數在使用前是否具有有效值。
在下面的示例中,我們使用型別守衛 typeof age === 'number' 來檢查 age 在使用前是否具有值。
function greet(name: string, age?: number): void { if (typeof age === 'number') { console.log(`You are ${age} years old.`); } } greet('Shahid', 35);
編譯後,它將生成以下 JavaScript 程式碼。
function greet(name, age) { if (typeof age === 'number') { console.log(`You are ${age} years old.`); } } greet('Shahid', 35);
上述示例程式碼的輸出如下:
You are 35 years old.
示例:可選引數必須是最後一個引數
可選引數必須放在引數列表中必填引數之後。
function add (x?: number, y: number = 30){ return x + y; } console.log(add(2,3));
在上面的示例中,可選引數放在必填引數之前。TypeScript 編譯器將丟擲以下錯誤:
'x' is possibly 'undefined'.
示例:可選引數不能有預設值
可選引數不能初始化為預設值。在下面的示例中,我們將可選引數 y 初始化為預設值 30。
function add (x: number, y?: number = 30){ return x + y; } console.log(add(2,3));
TypeScript 編譯器將顯示以下錯誤:
Parameter cannot have question mark and initializer.
錯誤表明我們不能將引數同時指定為可選引數和預設引數。
如何處理?預設引數也是可選引數。
示例:可選引數的預設值
預設引數自動成為可選引數。如果函式在呼叫時缺少值,則使用預設值來代替缺少的引數。
function greet(name: string, age: number = 35): void { console.log(`Hello, ${name}!`); console.log(`You are ${age} years old.`); } greet('Shahid');
在上面的示例中,我們定義了函式 greet,它有兩個引數:name 和 age。第二個引數 age 初始化為預設值。引數 age 在這裡充當可選引數。
編譯後,它將生成以下 JavaScript 程式碼。
function greet(name, age = 35) { console.log(`Hello, ${name}!`); console.log(`You are ${age} years old.`); } greet('Shahid');
上述示例程式碼的輸出如下:
Hello, Shahid! You are 35 years old.