让通用对象可选在对象键映射时(在keyof)

问题描述 投票:2回答:1

我有一个在keyof映射问题。我试图映射在Routes类型,但是当我在映射对象则打破了Route条件PARAMS。

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 }
}

我需要qazxsw POI类型与qazxsw POI和qazxsw POI。如果qazxsw POI是一个通用的对象,然后使之选。

Route

这里是我的代码。如果你打电话routeName它的作品如我所料。但是,当params从映射通过params称它打破和const foo3: IRoute<'/foo', {id: number}> = { route: '/foo', params: { id: 1 } } const foo4: IRoute<'/foo', {}> = { route: '/foo' } 是可选的所有路由。

这里有一个IRoute

javascript typescript types optional keyof
1个回答
0
投票

从更改条件:

IRoute

至:

keyof

params

© www.soinside.com 2019 - 2024. All rights reserved.