type Fn = (n: number) => string。函数参数"可少"> type Fn = (n: number) => string。函数参数"可少"> type Fn = (n: number) => string。函数参数"可少">
TypeScript 词条目录
前端Wiki/TypeScript/进阶/函数与类型守卫

函数类型

描述函数形状最常用类型别名:type Fn = (n: number) => string。函数参数"可少传不可多传":可选参数用 ? 标记且必须放在必填参数之后,有默认值的参数自动可选。

函数重载让一个函数根据参数呈现不同签名:先写多条重载签名,再写一条宽松的实现。调用时编辑器按重载签名给精确提示,是处理"参数数量/类型不同、返回不同"的正道。

  • 类型别名写函数最直观:type Fn = (a: number) => void
  • 可选参数 param?: 类型 必须排在必填参数之后
  • 重载 = 多条精确签名 + 一份宽松实现,提示更准确
TS
// 函数类型别名:参数类型可由上下文推断省略
type Formatter = (value: number) => string;
const fmt: Formatter = (v) => v.toFixed(2);

// 可选参数与默认值
function greet2(prefix: string, name = '_world') {
  return prefix + name;
}
greet2('hello');              // ✓ name 有默认值,可省

// 重载:按入参区分返回类型
function parse(input: string): number[];
function parse(input: number): string[];
function parse(input: any) {
  return String(input).split(',').map(Number);
}
const a = parse('1,2,3');     // number[]
const b = parse(123);         // string[]
JS
// 重载签名在编译时擦除,只留实现
const fmt = (v) => v.toFixed(2);
console.log(fmt(3.1415));       // '3.14'

function parse(input) {
  return String(input).split(',').map(Number);
}
console.log(parse('1,2,3'));    // [1, 2, 3]
console.log(parse(123));        // [123]
本节要点函数类型用 type 别名描述;可选参数靠 ? 或默认值;多形态用重载。
🔗 相关词条JavaScriptPromise闭包