如何定义与另一函数参数完全一致的TypeScript函数类型?
如何定义与另一个函数参数完全相同的TypeScript函数类型
原始TypeScript声明
interface Options { debug?: boolean; } declare function copy(text: string, options?: Options): boolean;
现有写法的痛点
之前用Parameters工具类型逐个提取参数的写法需要重复引用Parameters<typeof copy>,冗余且不便维护:
const copy2 = ( text: Parameters<typeof copy>[0], options: Parameters<typeof copy>[1] ) => { }
简洁解决方案
以下几种方式可以避免重复,直接复用原函数的参数(甚至完整类型):
直接复用原函数的完整类型
直接用typeof copy提取原函数的类型签名,直接赋值给新函数:const copy2: typeof copy = (text, options) => { // 自定义实现逻辑 if (options?.debug) { console.log(`正在复制: ${text}`); } return true; };这种方式会完整继承原函数的参数类型、可选性以及返回值类型。
用元组展开简化参数定义
结合Parameters工具类型和元组展开运算符...,一次性接收所有参数:const copy2 = (...args: Parameters<typeof copy>) => { const [text, options] = args; // 自定义实现逻辑 return true; };这种写法无需逐个声明参数,自动保留原函数的可选参数特性,参数数量或类型变化时会自动同步。
单独定义复用的函数类型
如果需要多次复用该函数类型,可以先提取为单独的类型别名:// 提取copy的函数类型 type CopyFunction = typeof copy; // 使用该类型定义新函数 const copy2: CopyFunction = (text, options) => { // 自定义实现逻辑 return true; };
内容的提问来源于stack exchange,提问作者user20416
相关产品推荐
相关产品推荐

