指尖上的记忆指尖上的记忆
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub
ts类型检查的问题:
如下代码, ts type checking 会报:error TS18046: 'route.params' is of type 'unknown'.
const route = useRoute();
const eventId = computed(() => {
  return route.params.id;
});
但是改为:
const route = useRoute("events-id-event-settings-session");
const eventId = computed(() => {
  return route.params.id;
});
什么原因呢?

这个问题涉及到 Vue Router 的类型推断。让我为您解释一下这两种情况的区别,以及为什么第二种方式不会报错。

1.第一种情况:

const route = useRoute();
const eventId = computed(() => {
  return route.params.id;
});

在这种情况下,useRoute() 没有提供任何参数。因此,TypeScript 无法推断出 route.params 的具体结构。它被推断为 unknown 类型,这是一种安全的类型,需要进行类型检查或断言才能使用。

2.第二种情况:

const route = useRoute("events-id-event-settings-session");
const eventId = computed(() => {
  return route.params.id;
});

在这种情况下,您为 useRoute() 提供了一个路由名称作为参数。这让 Vue Router 能够推断出该路由的参数类型。假设 "events-id-event-settings-session" 路由定义中包含一个 id 参数,TypeScript 就能正确推断 route.params.id 的类型,因此不会报错。

解决方案:

1.如果您知道路由名称,使用第二种方式是最好的,因为它提供了最精确的类型推断。

2.如果您不知道具体的路由名称,或者需要处理多种可能的路由,您可以使用类型断言:

const route = useRoute();
const eventId = computed(() => {
  return (route.params as { id: string }).id;
});