我有以下类型:
type AllRoutes = {
Home: undefined
Page: { id: string }
}
type NavFunction<RouteName extends keyof AllRoutes> = (
...args: AllRoutes[RouteName] extends undefined
? [RouteName]
: [RouteName, AllRoutes[RouteName]]
) => void
如果我将这种类型直接放在这样的函数上,则可以按预期工作:
export function navigate<RouteName extends keyof AllRoutes>(
...args: AllRoutes[RouteName] extends undefined
? [RouteName]
: [RouteName, AllRoutes[RouteName]]
) {
...
}
navigate('Home') // works!
navigate('Page', {id: 1}) // works!
navigate('Page') // Expected 2 args
我遇到的问题是我想将此类型应用于多种功能(每个功能用于不同的平台)。我似乎无法弄清楚如何将第一个类型应用于函数并使它像我刚刚发布的“直接”示例那样工作。
最佳答案
您可以为args
部分创建一个帮助程序类型。也许还为keyof AllRoutes
创建类型?
type RouteNames = keyof AllRoutes;
type GetArgs<RouteName extends RouteNames> = AllRoutes[RouteName] extends undefined
? [RouteName]
: [RouteName, AllRoutes[RouteName]];
export function navigate<RouteName extends RouteNames>(
...args: GetArgs<RouteName>
) {
...
}