面试题答案
一键面试- 创建类型定义文件:
- 首先在项目中创建一个
.d.ts
文件,比如lodash - custom.d.ts
。这个文件用于存放我们对lodash
特定函数的自定义类型声明。
- 首先在项目中创建一个
- 声明命名空间:
- 在
lodash - custom.d.ts
文件中,通过declare namespace _
来声明lodash
的命名空间。_
是lodash
在全局环境下常用的标识符。
declare namespace _ { }
- 在
- 声明
debounce
函数类型:_.debounce
函数接收一个函数和一个等待时间(毫秒数)作为参数,并返回一个新的函数。- 假设原始函数
func
的类型为(...args: any[]) => void
,返回的防抖函数接收同样的参数并返回void
。
declare namespace _ { function debounce<F extends (...args: any[]) => void>(func: F, wait: number): (...args: Parameters<F>) => void; }
- 这里使用了泛型
F
来表示原始函数的类型,Parameters<F>
用于获取F
函数的参数类型,确保返回的防抖函数接收同样类型的参数,从而保证类型安全。
- 使用声明:
- 在项目中的其他
.ts
文件中,如果引入了lodash
并使用_.debounce
,TypeScript就会按照我们在lodash - custom.d.ts
中定义的类型来进行类型检查。
import _ from 'lodash'; function myFunction(a: string, b: number) { console.log(a + b); } const debouncedFunction = _.debounce(myFunction, 1000); debouncedFunction('test', 123); // 类型检查通过
- 在项目中的其他
这样就通过在TypeScript命名空间中正确声明类型定义文件,解决了lodash
函数返回值类型与TypeScript推断不完全匹配的问题,并确保了函数调用时的类型安全。