我有一个Route
接口,它包含一个params
对象,我想在那个params对象上获得类型安全,这样,例如:
给定路由配置:
{
post: {
path: 'posts/:id',
}
}
navigtate({ name: 'post', params: { wrongKey: '1' } });
我正在为Route
使用这个接口,但是T[keyof T]
显然无法推断它是哪个键。
type Route<T extends Config> = {
hash?: string;
name: keyof T & string;
params?: RouteParams<T[keyof T]['path']>;
search?: Record<string, string>;
};
我希望这个错误,因为wrongKey
不是id
。目前,我所能做的就是将参数键作为string
的类型。
完整的代码在这里的操场链接。
2条答案
按热度按时间ux6nzvsh1#
首先,你缺少了
as const
来使你的路径成为文字,而不仅仅是string
:其次,
navigate
需要第二个泛型参数,这样parameters
就不会被推断为所有可能参数的并集:https://tsplay.dev/NB8nbW
nom7f22z2#
看看这个HOTScript library。最后一个示例(就在
API
部分之前)做了类似的事情。你可以做一些编辑,使它成为你喜欢的方式。或者尝试在
routes
对象后面添加as const
,如下所示:这将把
path
属性作为文字类型,而不仅仅是string
类型。