以下是我遇到的问题的一个非常简单的表示.
function func1(arg1: string) {
return arg1
}
function func2(arg1: number, arg2: string) {
return arg2
}
function selector<Determiner extends boolean>(
useFunc1Type: Determiner,
func: Determiner extends true ? typeof func1 : typeof func2
) {
if (useFunc1Type) {
func() // arg1 is inferred as 'never', shouldn't it be 'string'
}
}
我需要根据值useFunc1Type
使用适当的参数调用func,但我无法让编译器缩小func
的类型.因为两个函数(string
和number
)的第一个参数的类型之间没有重叠,所以它一直将第一个参数推断为‘Never’.我以为用if
块就行了,但事实并非如此.在这种情况下我能做什么呢?
如果有什么不同的话,我使用的是TypeScripv5.1.6.