【发布时间】:2020-06-24 21:29:50
【问题描述】:
我试图推断一个在 TypeScript 中返回元组类型的函数,但编译器总是推断该函数返回类型 [unknown, unknown]。
type DoubleReturn<F> = F extends (...args: infer _) => [infer R1, infer R2]
? [R1, R2]
: never;
export function TransformMapKV<K, V, F extends (key: K, value: V) => DoubleReturn<F>>(
values: ReadonlyMap<K, V>,
callback: F
): Map<DoubleReturn<F>[0], DoubleReturn<F>[0]> {
const newMap = new Map<DoubleReturn<F>[0], DoubleReturn<F>[0]>();
for (const [k, v] of values) {
const [nk, nv] = callback(k, v);
// typeof nk is unknown
// typeof nv is unknown
newMap.set(nk, nv);
}
return newMap;
}
还有一些测试代码:
// okay, x is [string, number]
type x = DoubleReturn<() => [string, number]>;
const m = new Map<string, string>();
m.set("abc", "123");
m.set("xyz", "789");
// okay, callback is (key: string, value: string) => [string, number]
const trM = TransformMapKV(m, (key, value): [string, number] => {
return [key + "!", Number.parseInt(value)];
});
编辑:简化了代码,但问题仍然存在。
【问题讨论】:
标签: typescript typescript-generics