【发布时间】:2021-10-02 20:09:09
【问题描述】:
我有这个函数,它接收一个函数对象,根据某些条件选择一个,然后调用并返回其中一个函数:
type ProductName = 'product1' | 'product2' | 'product3' | 'product4';
function detectProduct(): ProductName {
return 'product1'; // for demo purpose
}
export function onAnyProduct<T extends Partial<Record<ProductName, () => any>>> (
productCallbacks: T
): ReturnType<T[keyof T]> | undefined {
const name = detectProduct();
const callback = productCallbacks[name];
return callback?.();
}
const a = onAnyProduct({
product1: () => '1',
product2: () => ({}),
});
如您所见,T[keyof T] 存在问题,但 a 的类型正确为 const a: string | {} | undefined。
为什么它不知道T[keyof T] 是一个函数?
【问题讨论】:
标签: typescript