TypeScript报ts(2345)错误:类型'string | null'无法赋值给'string | number | boolean'参数
错误触发原因
这是TypeScript静态类型校验抛出的类型不匹配错误,具体触发逻辑如下:
Argument of type 'string | null' is not assignable to parameter of type 'string | number | boolean'.
Type 'null' is not assignable to type 'string | number | boolean'.ts(2345)
(property) User.token: string | null
你的User.token属性的声明类型为string | null,但你传递User.token作为参数的目标位置,只允许传入string | number | boolean三种类型的值,不接受null,因此触发类型校验报错。
解决方案
根据你的业务场景可以选择以下任意一种方式处理:
- 非空断言:如果业务逻辑可以保证调用该参数的场景下
User.token一定不为null,可以直接在变量后添加!非空断言运算符,告知TypeScript跳过该值的空值校验,示例写法:User.token! - 空值兜底:使用空值合并运算符
??给null场景设置兜底值,确保传递的参数永远不会为null,示例写法:User.token ?? '',当token为null时会自动使用空字符串作为替代值传入 - 类型收窄判断:在传递参数前增加非空判断,TypeScript会自动在判断生效的代码块内收窄变量类型,不需要额外的类型语法即可通过校验,示例代码:
const token = User.token if (token !== null) { // 该代码块内token的类型会被自动识别为string,可直接传入 targetMethod(token) }
- 调整类型声明:如果业务逻辑允许目标位置接受
null作为合法参数,可以修改目标参数的类型声明,新增null类型支持,将原类型string | number | boolean调整为string | number | boolean | null即可。
内容的提问来源于stack exchange,提问作者Abdelrahman Salah
相关产品推荐
相关产品推荐

