当前位置: 首页 > news >正文

TypeScript:完整的函数类型书写方式

        在TypeScript中,函数类型用于定义函数的签名,包括参数类型、返回值类型以及可选特性(如可选参数、默认参数、剩余参数)。

1. 函数类型表达式

        这是最直接的方式,使用箭头语法定义函数类型。语法为:(参数1: 类型1, 参数2: 类型2, ...) => 返回值类型。适用于变量或参数的类型注解。

// 定义一个函数类型变量
let add: (a: number, b: number) => number;
add = (x, y) => x + y; // 实现必须匹配类型// 作为参数传递
function calculate(operation: (x: number, y: number) => number, a: number, b: number): number {return operation(a, b);
}
console.log(calculate(add, 2, 3)); // 输出 5

2. 接口定义函数类型

        通过接口(interface)定义函数类型,特别适合需要复用或添加额外属性的场景。语法为:interface 接口名 { (参数: 类型): 返回值类型; }

// 定义一个函数接口
interface MathOperation {(a: number, b: number): number;
}// 实现接口
let multiply: MathOperation = (x, y) => x * y;// 接口可扩展属性(如函数描述)
interface AdvancedOperation extends MathOperation {description: string;
}
let customOp: AdvancedOperation = (x, y) => x - y;
customOp.description = "减法操作";

3. 类型别名(Type Alias)

        使用 type 关键字定义函数类型别名,语法类似函数类型表达式:type 类型名 = (参数: 类型) => 返回值类型;。适合简化复杂类型。

// 定义类型别名
type StringConverter = (input: string) => string;// 使用类型别名
let toUpperCase: StringConverter = (str) => str.toUpperCase();
console.log(toUpperCase("hello")); // 输出 "HELLO"

4. 可选参数、默认参数和剩余参数

  • 可选参数:使用 ? 标记,如 (param?: type)

  • 默认参数:在函数实现中指定默认值,但类型定义需包含可选性。

  • 剩余参数:使用 ...rest: type[] 表示可变参数列表。

// 函数类型包含可选和剩余参数
type Logger = (message: string, prefix?: string, ...details: any[]) => void;// 实现
const log: Logger = (msg, prefix = "Info", ...args) => {console.log(`${prefix}: ${msg}`, args);
};
log("Error occurred", "Alert", "code: 500", "time: now"); // 输出 "Alert: Error occurred" 和剩余参数

5. 函数重载(Overloads)

        TypeScript 支持函数重载,通过多个签名定义不同参数组合,最后用实现签名统一处理。语法为:先声明多个重载签名,然后一个兼容的实现签名。

// 重载示例:处理不同输入类型
function combine(input: string, times: number): string;
function combine(input: number, times: number): number;
function combine(input: any, times: number): any {if (typeof input === "string") {return input.repeat(times);} else if (typeof input === "number") {return input * times;}
}
console.log(combine("Hi", 3)); // 输出 "HiHiHi"
console.log(combine(5, 3));    // 输出 15

关键点总结

  • 函数类型确保类型安全,防止参数或返回值类型错误。

  • 优先使用函数类型表达式或类型别名简化代码;接口适合需要扩展属性的场景。

  • 可选参数和剩余参数增强灵活性,但需注意实现时的默认值处理。

  • 重载用于处理多态行为,但实现签名需兼容所有重载。

http://www.dtcms.com/a/354357.html

相关文章:

  • 【开题答辩全过程】以超市管理系统为例,包含答辩的问题和答案
  • Linux 系统核心调优:CPU、磁盘 I/O、网络与内核参数实战
  • 流行蝴蝶剑高清重制版Windows10可玩!
  • 小程子找Bug之for循环的初始化表达类型
  • 【美团】放它一马
  • 今日行情明日机会——20250827
  • 即时配送运营平台系统功能分析
  • 寄存器, 堆栈, 汇编指令详解
  • 入门概念|Thymeleaf与Vue
  • 企业微信对接 代理 WXJava Ngnix映射 weixin-java-cp
  • Vue 登录页高低分辨率背景图优化实现
  • mathtype公式存在乱码
  • SqlHelper类的方法详细解读和使用示例
  • Libvio访问异常排查指南
  • sql server 取起始日期到结束日期中自然月最后一天,与日期维度行转列
  • 数据治理:AI健康血液的生命线
  • Elasticsearch数据迁移快照方案初探(一):多节点集群配置踩坑记
  • Anaconda的安装与使用
  • 文本分块的优化策略-语义完整性、控制长度、重叠切分、结合模型,考虑大模型输入限制
  • matlab的app中传递数据
  • 林墨2025全新个人EP《嘻嘻呵呵嘿嘿哈哈》 第三支单曲解锁
  • 【数据分享】安徽省安庆市地理基础数据(道路、水系、铁路、行政边界(含乡镇)、DEM等)
  • 企业分支上云的常见误区与纠正方案
  • LeetCode - 反转链表 / K 个一组翻转链表
  • HSA35NV001美光固态闪存NQ482NQ470
  • CT03-215.数组中第k大的元素
  • 面试之微服务架构
  • 美团面试手撕:手动实现开方函数math.sqrt(x)
  • Spring Security 深度学习(一): 基础入门与默认行为分析
  • 【Vue2 ✨】Vue2 入门之旅(一):初识 Vue2