Open vaakian opened 2 years ago
记录各种遇到的TypeScript实际开发情况
用到两个提取函数类型关键字:Parameters/ReturnType
Parameters
ReturnType
F extends (...args: any[]) => never 声明函数类型,泛型F,由于debounce之后并不是同步执行,不可能有同步的返回值,所以为void。
F extends (...args: any[]) => never
F
debounce
同步的
void
export const debounce = <F extends (...args: any[]) => void>(func: F, waitFor: number) => { let timeout: ReturnType<typeof setTimeout> | null = null; const debounced = (...args: Parameters<F>) => { if (timeout !== null) { clearTimeout(timeout); timeout = null; } timeout = setTimeout(() => func(...args), waitFor); }; // 自动推导类型 return debounced; // return debounced as (...args: Parameters<F>) => ReturnType<F>; };
这里主要用到函数类型的Extends。
Extends
TODO
debounce
用到两个提取函数类型关键字:
Parameters
/ReturnType
F extends (...args: any[]) => never
声明函数类型,泛型F
,由于debounce
之后并不是同步执行,不可能有同步的
返回值,所以为void
。这里主要用到函数类型的
Extends
。