TypeScript 函数类型
在 TypeScript 中,函数类型不仅定义了函数的参数类型和返回值类型,还可以将函数本身作为一种类型来使用。这就是“函数类型”的核心概念。
基本写法
为函数添加类型注解包含两个部分:参数类型、返回值类型。
// 语法:(参数: 类型, 参数: 类型) => 返回值类型
function add(a: number, b: number): number {
return a + b;
}
注意返回值类型的注解写在参数括号之后,用冒号 : 分隔。
如果函数没有返回值,用 void:
function logMessage(msg: string): void {
console.log(msg);
// 没有 return,或者 return; 但不返回值
}
参数类型
可选参数
参数名后加 ? 表示该参数可选:
function greet(name: string, prefix?: string): string {
if (prefix) {
return `${prefix} ${name}`;
}
return `Hello ${name}`;
}
greet('张三'); // 'Hello 张三'
greet('张三', 'Mr.'); // 'Mr. 张三'
注意:可选参数必须放在必选参数之后。
默认参数
默认参数也支持类型注解:
function greet(name: string, prefix: string = 'Hello'): string {
return `${prefix} ${name}`;
}
greet('张三'); // 'Hello 张三'
greet('张三', 'Hi'); // 'Hi 张三'
TypeScript 会根据默认值推断类型,但显式注解更清晰。
返回值类型
| 类型 | 含义 | 示例 |
|---|---|---|
void |
函数没有返回值(或返回 undefined) | 日志函数、事件处理函数 |
never |
函数永远不会正常结束(抛错或死循环) | 抛出异常、无限循环 |
// void:没有返回值
function log(msg: string): void {
console.log(msg);
}
// never:抛出异常,函数在此终止
function throwError(msg: string): never {
throw new Error(msg);
}
// never:无限循环,永远不会返回
function infiniteLoop(): never {
while (true) {
// 不会跳出
}
}
never 不常用,但知道它的存在能帮你理解一些高级类型场景。