关于TS类型推导中结果中,函数参数的类型问题?
链接在这里:https://tsplay.dev/mxE51W
type ClassNamesUtil = (value: string) => string;
type ClassNames = (value: number) => string;
interface WraperProps<T extends string | undefined = undefined> {
styles: T;
cx: T extends string ? ClassNamesUtil : ClassNames;
}
function action<T extends string | undefined = undefined>({ styles, cx }: WraperProps<T>) {
console.log(styles, cx('a'));
}
问题是:
- 为什么在
action
中,调用cx('a')
的时候,参数类型是never
呢? - 如何让
cx
根据传入的泛型T
来决定接受的类型呢?
当
T
为undefined
时,WraperProps
为:函数调用
cx('a')
非法cx
为ClassNamesUtil | ClassNames
==>
((value: string) => string) | ((value: number) => string)
==>
(value: string & number) => (string | string)
==>
(value: never) => string
尝试使用函数重载和
any