TypeScript 踩坑记录
函数重载与泛型丢失
Parameters / ReturnType 对于重载函数而言只会获取最后一个
ts
// 有一个重载函数
type StoreGet = {
(key: string): string;
<T>(key: string, defaultValue: T): T;
};
// 将这个重载函数转为异步函数
type StoreGetAsync = {
(...args: Parameters<StoreGet>): Promise<ReturnType<StoreGet>>;
};上面例子中 StoreGetAsync 的实际类型为:
type StoreGetAsync = (key: string, defaultValue: unknown) => Promise<unknown>
明显丢失了重载,只拿到了最后一个重载类型,而且我们能看到泛型也被擦除了
目前好像没有什么方案来解决这个问题,还是老老实实写类型吧
