(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 的位置可以接受"有返回值的函数"——返回值会被忽略。这是事件系统能接受各种回调的原因。