vaakian / vaakian.github.io

some notes
https://vaakian.github.io
3 stars 0 forks source link

TypeScript samples #44

Open vaakian opened 2 years ago

vaakian commented 2 years ago

记录各种遇到的TypeScript实际开发情况

debounce

用到两个提取函数类型关键字:Parameters/ReturnType

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

vaakian commented 2 years ago

Decorator装饰器

TODO