TypeScript中能否定义函数接口?如何复用函数类型签名?
在TypeScript中定义函数类型接口来简化代码
当然可以!TypeScript 完全支持定义函数类型的接口(或类型别名),用来简化你提到的这种参数和返回值都是函数的场景,写法和你定义对象接口一样直观。
方法一:用接口定义函数类型(调用签名)
你可以在接口里使用调用签名来描述函数的结构,语法是直接写函数的参数和返回值类型:
// 先假设B和C是你已经定义好的类型 interface B { /* ... */ } interface C { /* ... */ } // 定义函数类型接口A interface A { (b: B): C; } // 现在就能简化你的meth函数了 function meth(a: A): A { // 这里写你的实现逻辑,比如返回符合A类型的函数 return function(b: B): C { // ...具体业务代码 }; }
方法二:用类型别名(Type Alias)
如果觉得接口写法有点繁琐,也可以用类型别名来定义函数类型,这种写法更简洁直观:
type B = number; // 举个具体的B类型例子 type C = string; // 举个具体的C类型例子 // 定义函数类型A type A = (b: B) => C; // 简化后的meth函数 function meth(a: A): A { // 示例实现:返回一个加工输入的函数 return (input: B) => `转换结果:${input}`; }
实际使用示例
拿具体的类型来演示,假设B是number,C是string:
type B = number; type C = string; type A = (b: B) => C; // 实现meth函数 function meth(a: A): A { // 对传入的函数结果做一层包装 return (num) => `经过meth处理:${a(num)}`; } // 使用示例 const originalFunc = (num: number) => num.toString(); const processedFunc = meth(originalFunc); console.log(processedFunc(456)); // 输出 "经过meth处理:456"
两种方式都能完美实现你想要的简化效果,把重复的函数类型声明(b: B) => C替换成简洁的A,让代码更易读、更易维护。
内容的提问来源于stack exchange,提问作者option 12
相关产品推荐
相关产品推荐

