如何用TypeScript类型定义声明函数参数?避免重复声明
在TypeScript中复用函数参数类型的几种方法
当然可以,TypeScript提供了多种方案帮你避免重复编写函数参数声明,下面是贴合你需求的具体实现:
1. 解构参数+对象类型(最接近props写法)
这就是你想要的类似props: IName的方式,把参数包装成对象后用已定义的类型约束:
type IName = { firstName: string; lastName: string; } // 直接解构参数并绑定类型,修改IName时函数参数自动同步 const fullName = ({ firstName, lastName }: IName): string => { return firstName + lastName; }
2. 复用已有的函数类型
如果你已经定义了FullNameFn这种函数类型,不用重复写参数,直接把函数指定为该类型即可:
type FullNameFn = (firstName: string, lastName: string) => string; // 直接绑定函数类型,参数和返回值自动被约束 const fullName: FullNameFn = (firstName, lastName) => { return firstName + lastName; }
要是需要显式提取参数(比如做类型推导),可以用Parameters工具类型获取参数元组:
type FullNameFn = (firstName: string, lastName: string) => string; const fullName: FullNameFn = (...[firstName, lastName]: Parameters<FullNameFn>) => { return firstName + lastName; }
3. 参数元组类型
如果不想用对象传递参数,也可以定义参数元组类型来复用:
type NameParams = [firstName: string, lastName: string]; const fullName = (...[firstName, lastName]: NameParams): string => { return firstName + lastName; }
总结
优先推荐第一种解构对象的方式,最符合你想要的props式写法,后续修改类型时只需维护一处;如果要保留原有的独立参数传递方式,直接绑定函数类型的方案最简洁。
内容的提问来源于stack exchange,提问作者Michael Brenndoerfer
相关产品推荐
相关产品推荐

