name(arg: T): R 函数类型注解
最后更新:2026-10-22
name(arg: T): R 函数类型注解
函数注解给参数和返回值写明类型:调用方一眼看清"传什么、得什么",传错类型在编译期就被拦下。没有注解时 TS 也能靠推断兜底,但显式注解是公共 API 的基本礼仪。
| 分组 | 函数与类 |
|---|---|
| 类型 | 语法 |
| 严格模式 | 不需要 |
ℹ️ 说明 编辑器将 TypeScript 转译为 JavaScript 后运行(不做类型检查);类型检查结果见示例 Output。
📝 语法
// 快递费 = 基础费 + 续重
function shippingFee(weightKg: number, express: boolean): number {
return 8 + weightKg * (express ? 3.5 : 1.5);
}
const calc: (w: number, express: boolean) => number = shippingFee;
// 没有返回值 → void
function notify(msg: string): void {
console.log(msg);
}
⚙️ 参数
| weightKg: number | 参数注解:参数名后冒号接类型;传错类型(如字符串)编译报错 |
|---|---|
| ): number | 返回值注解:写在参数列表之后,约束每个 return 必须兼容该类型 |
| void | 表示"没有有意义的返回值";调用方不应使用其结果 |
返回值:返回值类型写在参数列表之后(: number),编译器逐一检查 return 与其兼容;省略时由函数体推断。
▶ 示例
修改下面的代码,点击试一试查看转译运行结果:
输出:
普通: 11 元
加急: 15 元
(转译后运行输出;shippingFee(2, "yes") 会得到编译错误——第二参数必须是 boolean)
💡 要点
ℹ️ 说明 返回值类型通常可以省略(推断很聪明),但导出的公共函数建议显式标注——防止实现改动悄悄改变对外类型。
⚠️ 注意 参数注解不可省略:与变量不同,独立函数的参数没有类型注解时(noImplicitAny 开启)直接报错——TS 无法凭空知道调用方会传什么。
💡 提示 回调参数不必自己写注解:当变量/参数已声明函数类型时,实现体里的参数会自动获得类型(上下文推断,见 contextual-typing 条目)。
🏷️ 相关函数与类
💡 相关案例
更多案例即将上线。
📚 相关教程
❓ 常见问题
Q 返回值注解什么时候必须写?
A 三种典型场景:导出的公共 API、递归函数、推断结果不符预期时(如联合类型被拓宽)。日常内部函数可依赖推断。
Q : void 和 : undefined 有区别吗?
A 有。void 表示"不关心返回值",任何返回值类型的函数都可赋给它;undefined 是具体类型,函数必须显式 return(或返回 undefined)。
Q 参数类型写 any 行不行?
A 能编译但不建议:any 会关闭对参数和返回值的所有检查。优先精确类型,确实"任意"时用 unknown 并在使用处收窄。