MST

星途 面试题库

面试题:TypeScript泛型约束与默认参数在复杂类型中的运用

假设有一个场景,需要实现一个通用的缓存函数 `cacheFunction`。该函数接收一个函数 `fn` 作为参数,`fn` 可以接受任意数量和类型的参数并返回一个值。`cacheFunction` 要使用泛型约束确保 `fn` 的参数和返回值类型都能被正确推断。同时,为 `cacheFunction` 提供一个默认参数,表示缓存失效时间(单位:秒)。当调用 `cacheFunction` 返回的新函数时,如果缓存未失效则直接返回缓存值,否则调用原函数 `fn` 并更新缓存。请实现这个 `cacheFunction`。
23.1万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
function cacheFunction<F extends (...args: any[]) => any>(fn: F, cacheTime = 60): (...args: Parameters<F>) => ReturnType<F> {
    const cache: Map<string, { value: ReturnType<F>, timestamp: number }> = new Map();

    return function(...args: Parameters<F>) {
        const key = args.toString();
        const cached = cache.get(key);

        if (cached && Date.now() - cached.timestamp < cacheTime * 1000) {
            return cached.value;
        }

        const result = fn.apply(this, args);
        cache.set(key, { value: result, timestamp: Date.now() });
        return result;
    };
}