解决ts中的类型问题:利用any类型污染来实现

nestjs用request.user可以获取到passport中自己编写的策略返回的值,但是使用这个user中的数据时,就显示返回的user值的类型中没有其他数据。使用ctrl+鼠标点一下这个user,跳转到passport依赖的一个文件中,原来这个user是定义了一个接口,里面是空的。如果使用这个接口来做类型,好处是可以接受各种数据,坏处是后续访问不到里面的数据。但是我的passport策略返回的是一个user对象,里面包含一个id值,我需要使用request.user中的id值。有两种解决方法:一种是直接修改依赖中接口定义的类型,加上一个id的属性和类型;另一种就是利用any污染这个接口的类型。将request.user赋值给一个any对象,然后再使用对象中的id。

interface User {

}
const user:User = {
    name:'along',
    age:18
}
const data:any = user
console.log(data.age)

上面就是使用any类型污染来解决ts中类型问题的代码事例。这样我们就不用修改依赖包里面的代码了,毕竟直接修改依赖不是太好。

补:如果ts中要求一个类型为字符串的值,但是只有其他类型的值,那么可以使用模板字符串`${表达式}`将其他类型的值转为字符串。

posted @ 2023-12-22 15:13  数星观月  阅读(50)  评论(0编辑  收藏  举报