【发布时间】:2018-10-15 10:46:46
【问题描述】:
我正在使用 Typescript、Redux 和 React,所有这些对我来说都是新的,所以这可能有一个我没有看到的简单修复。
我有一个 actions.ts 文件,其中包含这样的枚举:
export enum AnimalTypes {
CAT = 'CAT',
DOG = 'DOG'
}
我将它导入到我的 reducers.ts 文件中,并试图在这样的日志语句中使用它:
import {AnimalTypes} from './actions';
export function someFunction() {
// Print the word "CAT"
console.log(AnimalTypes[AnimalTypes.CAT]);
}
当我尝试启动我的网站时收到以下错误:
TypeError: Cannot read property 'CAT' of undefined
at someFunction (reducer.ts:5)
at combineReducers.js:20
etc.
我的 IDE 没有给我任何错误,TSLint 也没有。我在网上阅读了一堆试图找到答案的文章,但最接近我的是来自枚举中没有“export”关键字的人,而我有。
这里会发生什么?如有任何帮助,我将不胜感激。
谢谢。
编辑: 问题不是反向映射,而是枚举的任何使用。这只是我能想到的最短用法。我实际上是在 switch 语句中使用它:
import {AnimalTypes} from './actions';
export function otherFunction(animal) {
switch (animal.type) {
case AnimalTypes.CAT:
// Do stuff
}
当我构建上面的代码时,我得到了这个错误Uncaught TypeError: Cannot read property 'CAT' of undefined
【问题讨论】:
-
someFunction是否被actions.ts调用(可能是间接调用)在AnimalTypes的定义执行之前? -
这是可能的。我如何确定/控制这些事情发生的顺序?
-
调试器、console.log、检查调用堆栈等
-
不应该只是console.log(AnimalTypes.CAT);无论如何,为什么要像数组一样访问它?
-
根据@RyanCavanaugh 的关于查看调用堆栈的建议——我遇到了一个奇怪的错误,枚举以某种方式没有被定义,并且完全出乎意料地提到了一个承诺:
Uncaught (in promise) TypeError: Cannot read property 'default' of undefined在底部在调用堆栈中,有特定文件的所有枚举导入,而导致问题的一个枚举确实是undefined。经过大量的试验和错误,将这些导入移到文件顶部使一切正常。
标签: reactjs typescript enums redux