type GetValue<T> = T | (() => T)
type GetValueType<T> = T extends () => any
? ReturnType<Extract<T, () => any>> | Exclude<T, () => any>
: T
declare function f<T extends any>(
map: [probability: number, value: T][]
): () => GetValueType<T>
f<GetValue<number>>([
[1, 1],
[1, () => 1],
])
f([
[1, 1],
[1, () => 1], // The type is not correctly inferred
)
这不是已经正确推断出来了嘛.
如果需要兼容
() => 1
,那可以这样定义