我正在使用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.我的集成开发环境没有给我任何错误,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
发布于 2018-05-05 10:46:56
typescript的这一特性被称为“反向映射”,根据文档,它只支持数字枚举。下面是来自https://www.typescriptlang.org/docs/handbook/enums.html的代码片段
除了为成员创建具有属性名称的对象外,数字枚举成员还获得从枚举值到枚举名称的反向映射。
发布于 2018-10-13 03:31:27
我无法重现您的情况:我在reducer中导入了一个枚举,并创建了记录该枚举的确切函数,它工作了。
但是,我在一个稍微不同的上下文中遇到了同样的问题:我在SideNav文件中为我的AppRoutes枚举添加了导入。在SideNav文件中,在通过一些JSON映射并返回一些TSX的const popularArticles中,当我尝试<NavLink to={AppRoutes.something}>时,我得到了“无法读取属性某种未定义的东西”,尽管在集成开发环境中将鼠标悬停在AppRoutes.something上会显示来自正确来源的正确值。我认为这与你的情况非常相似,所以我希望我的解决方案能帮助未来的读者遇到这个问题。
对我来说,解决这个问题的方法是将const popularArticles (位于SideNav类外部)集成到类内部的一个变量public popularArticles中,就在构造函数之前。我不知道为什么,但在进一步的实验中,我发现显然你不能在类或SFC之外访问枚举...
发布于 2019-12-20 01:44:04
我做的是这样的:
import {AnimalTypes} from './actions';
export function someFunction() {
var animalTypesEnum = AnimalTypes;
// Print the word "CAT"
console.log(animalTypesEnum[animalTypesEnum.CAT]);
}而且它起作用了。TS v3.6.4
https://stackoverflow.com/questions/50183529
复制相似问题