- 对象可能为“未定义”。
const route_permission = route_item.meta.permission as number // 报错: 对象可能为“未定义”。
解析:作为 RouteRecordRaw 类型的变量 route_item 可能有 meta 这个属性,也可能没有这个属性(RouteMeta | undefined),业务上我们确定是有 meta 这个属性的,因此可以用断言修饰 meta 这个属性:
const route_permission = route_item.meta!.permission as number
- 类型“AxiosResponse<any, any>”上不存在属性“menu_permissions_id”
request.get('/info').then(res => {
context.commit('set_user_info', res)
filter_async(res.menu_permissions_id) // 报错:类型“AxiosResponse<any, any>”上不存在属性“menu_permissions_id”
}).catch(err => {
if (!err.type)
console.error(err)
})
解析:res 作为 axios 的一个返回结果,ts 并不知道它里面有没有 menu_permissions_id 这个属性,这个属性是后端返回的,因此我们要让 ts 知道 res 里面是肯定有这个属性的,因为我们跟后端约好了返回结果里面就是有这个字段的,所以可以用断言解决这个问题:
request.get('/info').then(res => {
context.commit('set_user_info', res)
filter_async((res as any).menu_permissions_id)
}).catch(err => {
if (!err.type)
console.error(err)
})
- 类型约束
{
menus_status: <'0' | '1'> '1',
}
如果不加 <'0' | '1'> ,menus_status 的类型会被推断为 string,加了表示 menus_status 只会是 ’0‘ 和 ’1‘ 之间的一个
网友评论