# 函数与类型

URL: https://caijiao.org/ts/part1/function-types
Source: docs/ts/part1/function-types.md
Description: TypeScript 中函数相关的类型注解方式，包括参数与返回值类型、可选与默认参数、剩余参数，以及函数重载的用法。

[TypeScript](/ts/) 提供了对函数结构的完整类型支持，包括参数、返回值、重载等。

## 参数与返回值类型

为函数添加明确的参数和返回值类型：

```ts
function greet(name: string): string {
  return `Hello, ${name}`;
}
```

可以使用类型推断省略返回值类型：

```ts
function square(x: number) {
  return x * x;
}
```

## 可选参数与默认参数

可选参数使用 `?` 声明，默认参数和 JavaScript 一样：

```ts
function log(message: string, level?: string) {
  console.log(`[${level || "info"}] ${message}`);
}

function multiply(a: number, b: number = 1): number {
  return a * b;
}
```

> 可选参数必须排在必填参数之后。

## 剩余参数（Rest Parameters）

与 JavaScript 相同，使用 `...` 来接收多个参数：

```ts
function sum(...nums: number[]): number {
  return nums.reduce((acc, curr) => acc + curr, 0);
}
```

## 函数重载

函数重载允许定义多个函数签名：

```ts
function reverse(x: string): string;
function reverse(x: number): number;

function reverse(x: string | number): string | number {
  if (typeof x === "string") {
    return x.split("").reverse().join("");
  }
  return Number(x.toString().split("").reverse().join(""));
}
```

> 注意：真正的实现只能有一个，其他签名用于类型提示。

函数类型是 TypeScript 的核心能力之一，良好的函数类型注解可以提升代码的可读性与可维护性。
