【发布时间】:2019-06-28 16:59:13
【问题描述】:
我在keyof 中的映射有问题。我正在尝试映射Routes 类型,但是当我映射对象时,它会破坏Route 的条件参数。
type Routes = {
'/home': {}
'/pages': {
pageId: number
}
}
type IRoute<RouteName, Params> = {
route: RouteName
} & ({} extends Params ? { params?: Params } : { params: Params })
type Router = {
[RouteName in keyof Routes]: IRoute<RouteName, Routes[RouteName]>
}
type Route = Router[keyof Router]
这里应该需要params,但 TS 忽略它:
const foo: Route = {
route: '/pages'
// Missing params: { pageId: number }
}
我需要Route 输入routeName 和params。如果params 是一个通用对象,则将其设为可选。
const foo3: IRoute<'/foo', {id: number}> = {
route: '/foo',
params: {
id: 1
}
}
const foo4: IRoute<'/foo', {}> = {
route: '/foo'
}
这是我的代码。如果您致电IRoute,它会按我的预期工作。但是当IRoute 在keyof 的映射中被调用时,它会中断并且params 对于所有路由都是可选的。
【问题讨论】:
标签: javascript typescript types optional keyof