【发布时间】:2021-12-05 11:50:59
【问题描述】:
我不完全确定我是否正确,所以我会解释一下。
我正在使用 TypeScript 创建 React 应用程序,为了让我的生活更简单,我想将所有路由路径分别存储为常量,我还希望在 VS Code 中拥有像自动完成这样的 TypeScript。所以我有这个结构之王:
type GlobalRoutingT = 'user' | 'listing';
type RoutingVariants = {
list: string,
add: string,
get: string,
[key: string]: RoutingVariants | string,
};
type RouterT = Record<GlobalRoutingT, RoutingVariants>;
export const Routes: RouterT = {
user: {
list: '/user',
add: '/user/add',
get: '/user/:id',
invoices: {
list: '/user/invoices',
add: '/user/invoices/add',
get: '/user/invoices/:id',
}
},
listing: {
list: '/listing',
add: '/listing/add',
get: '/listing/:id',
},
};
效果很好,我现在可以这样使用它
<Route path={Routes.user.invoices.get} exact >
<GetInvoice />
</Route>
但是在 VS Code 里面我得到了错误:
类型'string | 上不存在属性'get'路由变体'。类型“字符串”上不存在属性“获取”。
和 Routes.user.invoices.get 部分突出显示。
我做错了什么?
【问题讨论】:
-
问题是
[key: string]: RoutingVariants | string说RoutingVariants的any 属性可以有string作为类型,所以Routes.user.invoices在技术上可以是一个字符串。我还不确定如何解决这个问题。 -
@Cerbrus 听起来不错,但令人沮丧,我不明白这是 eslint 问题还是我只是不擅长 TypeScript。
-
你看过我的回答了吗?我认为这与您所描述的最接近。
标签: typescript visual-studio-code types eslint