2

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

老猫抽旱烟
216 声望51 粉丝

平平无奇的前端开发