解决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中要求一个类型为字符串的值,但是只有其他类型的值,那么可以使用模板字符串`${表达式}`将其他类型的值转为字符串。