在一个使用打字本的角度应用程序上,我有以下内容:
userId?: number;
token?: string;
constructor(private route: ActivatedRoute) {
this.route.queryParamMap.subscribe(
(value: ParamMap) => {
this.userId = value.has('userId') ? +!value.get('userId') : undefined;
this.token = value.has('token') ? value.get('token') : undefined;
}
);
}
但是我在定义token
时得到了错误
Type 'string | null | undefined' is not assignable to type 'string | undefined'.
Type 'null' is not assignable to type 'string | undefined'.
如何使此工作与定义userId
时相同
发布于 2021-08-28 23:12:33
ParamMap.get
返回string | null
。因为您的token
实际上有string | undefined
类型,所以它们是不兼容的(在JS/TS中,未定义和null是不同的东西)。只需使用null
处理nullish coalescing operator ??
的情况,同时也消除has
(这是多余的)。
this.token = value.get('token') ?? undefined;
发布于 2021-08-29 03:35:37
类型脚本中任何变量的默认值都是未定义的,您已经将变量声明为可空类型(?-nullable类型)。因此,如果没有为其赋值,则将赋值为null。因此,它不能采取未定义的,因为您已经声明为空可类型。将定义的值更改为空,如下所示。this.userId = value.has('userId')?+!value.get('userId'):null;this.token =value.has(‘令牌’)?Value.get(‘令牌’):null;
检查上面的代码是否工作,如果不工作,那么检查您在ParamMapv中声明的令牌变量的类型),或者共享分配了令牌值的位置。
https://stackoverflow.com/questions/68968666
复制相似问题