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 并在使用处收窄。
Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏