TypeScript中如何将函数类型应用到function关键字声明的函数上
TypeScript 目前没有提供直接给 function 关键字定义的顶层函数声明整体标注类型的语法,但有两种简洁的替代方案可以满足需求,不需要手动逐个标注参数和返回值类型。
方案1:使用带类型标注的变量接收函数表达式
你依然可以使用 function 关键字定义函数,只需要把它赋值给提前标注了 Add 类型的变量即可,TypeScript 会自动推导参数类型:
type Add = (x:number, y:number) => number const add: Add = function(x, y) { return x + y }
这种写法除了不具备函数提升特性之外,使用效果和普通函数声明完全一致,也支持 this、arguments 等函数专属特性。
方案2:使用声明合并保留函数提升特性
如果你必须使用顶层函数声明(比如依赖函数提升的特性),可以先通过 declare 声明变量类型,再实现函数,TypeScript 会自动合并两者的类型:
type Add = (x:number, y:number) => number declare const add: Add function add(x, y) { return x + y }
这种写法下 add 具备普通函数声明的提升特性,同时参数 x、y 会被自动推导为 number 类型,返回值也会自动匹配 Add 类型的定义,TS 会自动检查实现是否符合类型要求。
两种方案都比逐个取 Parameters、ReturnType 的写法更简洁易维护,后续如果 Add 类型有修改,不需要同步修改函数的参数类型定义。
内容的提问来源于stack exchange,提问作者kimsagro
相关产品推荐
相关产品推荐

