Typescript 该如何实现 react-router 的路由跳转的代码提示

2023-01-11 13:56:44 +08:00
 chenjustcam

比如我现在有一些路由:

  type RoutesType = '/home' | '/login' | '/user/:id';

我想封装 useNavigate 来实现跳转时能进行代码提示,同时对于 '/user/:id' 能实现 id 动态可变。要怎么做类型体操才能实现这个需求,或者是有别的方案能实现路由的代码提示吗?

829 次点击
所在节点    问与答
4 条回复
hua123s
2023-01-11 14:33:52 +08:00
chenjustcam
2023-01-11 15:02:46 +08:00
@hua123s 我之前写出来大概是这样:
```typescript
type GetRoutes<T> = T extends `${infer Path}/:${infer Param}` ? `${Path}/${string}` : T;
type RoutesType = GetRoutes<'/home' | '/login' | '/user/:id'>
```
但是在实际的代码提示里就只显示 '/home' 和 '/login' 了,使用 '/user/123' 倒是能通过类型检测,但是没有代码提示...
btw: 头像是燕姿耶
hua123s
2023-01-11 15:23:37 +08:00
如果要提示建议这样吧。
type RoutesType = '/home' | '/login' | `/user/${number | 1}`;
type RoutesType = '/home' | '/login' | `/user/${number | ':id'}`;
chenjustcam
2023-01-11 15:29:39 +08:00
@hua123s 好的,谢谢你!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/908134

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX