(arg: T) => R 函数类型表达式

最后更新:2026-10-22

(arg: T) => R 函数类型表达式

函数类型表达式描述"一类函数的形状":参数列表 + => + 返回值((value: string) => string | null)。把它存成 type 别名后,回调、校验器、中间件这类"以函数为值"的场景就有了可复用的类型名。

分组函数与类
类型语法
严格模式不需要

ℹ️ 说明 编辑器将 TypeScript 转译为 JavaScript 后运行(不做类型检查);类型检查结果见示例 Output。

📝 语法

type Validator = (value: string) => string | null;
type Comparator<T> = (a: T, b: T) => number;

const required: Validator = (v) => (v.length > 0 ? null : "Required");

⚙️ 参数

(value: string)参数列表:名字只作文档,实际按位置对应
=> string | null返回值类型:箭头读作"返回";这里约定 null 表示"无错误"

返回值:函数类型是纯类型描述,不产生运行时代码;变量按它赋值时,编译器逐项检查参数与返回值兼容。

▶ 示例

修改下面的代码,点击试一试查看转译运行结果:

输出:

["必填项","邮箱格式不正确"]
[]

(转译后运行输出;把参数不是 string 的函数塞进 rules 会得到编译错误)

💡 要点

ℹ️ 说明 参数名在类型里只是提示:(v: string) => R 与 (value: string) => R 是同一个类型;真正参与匹配的是位置和类型。
💡 提示 项目里反复出现的函数形状(事件处理器、加载器、中间件)都值得提一个 type 别名——改签名时只改一处。
⚠️ 注意 返回 string | null 时调用方拿到的是"可能为 null",必须先判空再用;用 null 表示"无错误"要作为团队约定写进文档。
更多案例即将上线。

📚 相关教程

❓ 常见问题

Q 函数类型表达式和带属性的可调用类型有什么区别?
A (v: string) => R 只描述调用;interface { (v: string): R; version: string } 在调用之外还挂属性(可调用的对象)。普通回调用表达式即可。
Q 回调参数还需要写注解吗?
A 不需要。const v: Validator = (v) => ... 中参数类型由 Validator 上下文提供(上下文推断);独立函数字面量才必须逐个标注。
Q 返回 void 的函数类型有什么特殊性?
A () => void 的位置可以接受"有返回值的函数"——返回值会被忽略。这是事件系统能接受各种回调的原因。
Web-Tutorial.com

Web-Tutorial 技术团队

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

100%

🙏 帮我们做得更好

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

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