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