Skip to content

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>

明显丢失了重载,只拿到了最后一个重载类型,而且我们能看到泛型也被擦除了

目前好像没有什么方案来解决这个问题,还是老老实实写类型吧

如有转载请标注本站原文地址