在VueRouter中使用route.query时,得到的类型是LocationQuery
export declare type LocationQuery = Record<string, LocationQueryValue | LocationQueryValue[]>;
而query中的参数类型为(string|null) | (string|null)[]
而正常情况下我们默认query中的参数都是string类型。
其实如果你的链接上有多个同名query,route.query会返回一个数组
// www.anyurl.com?name=123&name=456
console.log(route.query) // ['123', '456']
但是绝大多数情况下我们不会这样玩。
使用的时候我们认为query的值都是string,所以全部as一下是可以的。const aa = route.query.status as string
更方便的办法是在.d.ts文件中扩展route.query的类型
如下:
import 'vue-router'
declear module 'vue-router' {
interface RouteLocationNormalizedLoaded {
query: Record<string, string>
}
}
RouteLocationNormalizedLoaded 是route的类型,扩展route.query的类型为Record<string, string>可以应对大多数场景。
如果你确定你的应用只使用有限的几个已知类型的query,也可以声明成类似如下的形式
{
query: {
token?: string,
status?: '01' | '02'
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。