Z
ZHANK
基础入门

函数类型

学会为函数参数和返回值添加类型注解

函数类型

TypeScript 让你精确描述函数的参数和返回值类型。

学完本章你将: 为函数添加类型注解,掌握函数重载。


参数与返回值

typescript
// 基本函数类型
function add(a: number, b: number): number {
    return a + b;
}

// 无返回值
function log(message: string): void {
    console.log(message);
}

// 永不返回(抛异常或死循环)
function error(msg: string): never {
    throw new Error(msg);
}

可选参数与默认值

typescript
// 可选参数
function greet(name: string, title?: string): string {
    return title ? `${title} ${name}` : name;
}
console.log(greet("Alice", "Dr.")); // "Dr. Alice"
console.log(greet("Bob"));          // "Bob"

// 默认参数(自动可选)
function multiply(a: number, b: number = 1): number {
    return a * b;
}
console.log(multiply(5));  // 5

剩余参数

typescript
function sum(...numbers: number[]): number {
    return numbers.reduce((a, b) => a + b, 0);
}
console.log(sum(1, 2, 3, 4)); // 10

// 混合固定参数和剩余参数
function log(level: string, ...messages: string[]): void {
    console.log(`[${level}]`, messages.join(" "));
}
log("ERROR", "File not found", "Permission denied");

函数类型表达式

typescript
// 定义函数类型
type MathFunc = (a: number, b: number) => number;

const add: MathFunc = (a, b) => a + b;
const subtract: MathFunc = (a, b) => a - b;

// 回调函数类型
function fetchData(callback: (data: string) => void): void {
    setTimeout(() => callback("数据加载完毕"), 1000);
}

函数重载

typescript
// 重载签名
function format(value: string): string;
function format(value: number): string;
function format(value: boolean): string;

// 实现签名
function format(value: string | number | boolean): string {
    if (typeof value === "string") return `"${value}"`;
    if (typeof value === "number") return value.toFixed(2);
    return value ? "true" : "false";
}

console.log(format("hello")); // "\"hello\""
console.log(format(3.14159)); // "3.14"
console.log(format(true));    // "true"