验证值是否是enum的一部分



我使用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/")

相关内容

  • 没有找到相关文章

最新更新