TypeScript中BasicAsyncFunc泛型与memoized_async类型推断解析
TypeScript类型问题解答
1. 类型<U extends SimpleArgs, R> extends BasicAsyncFunc<U, R>的含义
这段是Memoized接口的定义逻辑,拆解来看:
<U extends SimpleArgs, R>:声明两个泛型参数,U被约束为必须是SimpleArgs类型(也就是由string/number/boolean/undefined组成的数组),R是异步函数返回值的原始类型。extends BasicAsyncFunc<U, R>:表示Memoized接口继承了BasicAsyncFunc<U, R>这个函数类型。意思是任何实现Memoized的对象,首先得是一个符合BasicAsyncFunc签名的异步函数——能接收U类型的参数,返回包含R类型深只读对象的Promise;同时还得额外拥有cache_size(获取缓存大小)和clear_cache(清空缓存)这两个方法。
简单说,Memoized就是“带缓存操作方法的特定异步函数”类型。
2. memoized_async会被推断为什么类型
memoize_async会被推断为一个泛型函数,具体类型如下:
const memoize_async: <R, U extends SimpleArgs>( options: { ttl: number; size: number }, f: BasicAsyncFunc<U, R> ) => Memoized<U, R>
它的作用是:接收一个含缓存过期时间ttl、缓存最大容量size的配置对象,以及一个符合BasicAsyncFunc签名的异步函数,返回一个Memoized类型对象——这个返回对象既可以像原函数一样调用,也能通过cache_size和clear_cache方法操作缓存。
内容的提问来源于stack exchange,提问作者confusedWarrior
相关产品推荐
相关产品推荐

