我使用Angular13.3.9
我的目标是知道一个值是否指向一个enum。
我的代码,
export enum HttpFunctionalErrorCodes {
ACCOUNT_NOT_FOUND = 'ACCOUNT_NOT_FOUND',
USER_ALREADY_EXISTS = 'USER_ALREADY_EXISTS',
BAD_CREDENTIALS = 'BAD_CREDENTIALS'
}
我的导出枚举是已经编译的npm库的一部分…
import { HttpFunctionalErrorCodes } from ...;
computeError(error: any): void {
console.log(error.code) // BAD_CREDENTIALS
console.log(HttpFunctionalErrorCodes) // undefined
if (!_.isNil(error.code) && error.code in HttpFunctionalErrorCodes) {
// TypeError: Cannot use 'in' operator to search for 'BAD_CREDENTIALS' in undefined
...
}
}
在这段代码中,我捕获了一个传递给computeError函数的错误。
在这个方法中,我试图找出代码是否是一个HttpFunctionalErrorCodes,这是一个枚举。
但是我得到这个错误TypeError: Cannot use 'in' operator to search for 'BAD_CREDENTIALS' in undefined
经过一番研究,我终于找到了这篇文章:https://stackoverflow.com/a/53232849/10872189这说明使用经典的enum应该没有任何问题。
我也试了一下:
error.code in Object.values(HttpFunctionalErrorCodes)
出现以下错误:TypeError: Cannot convert undefined or null to object
但是当我在TSPlayground上尝试时,它工作了!typescriptPlayground
如何验证我的值是枚举的一部分?为什么我有这个错误?
编辑
在nicholas-k的帮助和额外的研究之后,我找到了一些关于这个问题的出版物:
- 在与webpack绑定后,无法读取enum的未定义属性
- Angular从typescript npm包中使用枚举,未定义错误
我尝试了stackblitz,它工作
但是在我的库上尝试之后,没有办法。我得到同样的错误TypeError: Cannot use 'in' operator to search for 'BAD_CREDENTIALS' in undefined
export class HttpFunctionalErrorCodes {
static ACCOUNT_NOT_FOUND = 'ACCOUNT_NOT_FOUND'
static USER_ALREADY_EXISTS = 'USER_ALREADY_EXISTS'
static BAD_CREDENTIALS = 'BAD_CREDENTIALS'
}
或
export const HttpFunctionalErrorCodes = {
ACCOUNT_NOT_FOUND: 'ACCOUNT_NOT_FOUND',
USER_ALREADY_EXISTS: 'USER_ALREADY_EXISTS',
BAD_CREDENTIALS: 'BAD_CREDENTIALS'
}
我终于找到问题了!
我使用了这个方法:
export class HttpFunctionalErrorCodes {
static ACCOUNT_NOT_FOUND = 'ACCOUNT_NOT_FOUND'
static USER_ALREADY_EXISTS = 'USER_ALREADY_EXISTS'
static BAD_CREDENTIALS = 'BAD_CREDENTIALS'
}
我清除(删除)了angular缓存(在".angular/cache/13.3文件夹下)6/")