我目前正在尝试为组件输入实现联合类型
@Input('role') role: Role | Role[];
角色在哪里
enum Role { /**/ }
但是当我稍后在代码中使用变量时
userHasRole(role: Role): boolean
if (userHasRole(this.role)) { /**/ }
由于角色是数组或单个对象,并且该方法仅允许单个对象,因此会引发错误。
要尝试解决此问题,我已将此代码包装在使用instanceof进行检查的if语句中
if (this.role instanceof Role) {
if (userHasRole(this.role) { /**/ }
}
但是类型检查器仍在抛出可能是数组的错误,我该如何解决呢?
我从方法调用中得到2个错误
ts2345 argument of type 'Role | Role[]' is not assignable to parameter of type 'Role'. Type 'Role[]' is not assignable to type 'Role'.
并通过检查实例
ts2359 the right-hand side of an 'instanceof' expression must be of type 'any' or of a type assignable to the 'Function' interface type.
答案 0 :(得分:1)
您不能将instanceof
表达式与enum
一起使用。如果Role
是一门课程,那就行了。
您可以使用Array.isArray()
来检查它是数组还是单个值,TS会正确缩小控制流中的类型。
示例:
if (!Array.isArray(this.role)) {
// In here this.role has type Role
if (userHasRole(this.role)) { /**/ }
} else {
// In here this.role has type Role[] so you could do something like:
if (this.role.includes(Role.SOME_ROLE)) { /**/ }
}
PS-我认为userHasRole
应该接受Role | Role[]
...