在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'
}
}