繁体   English   中英

为什么 Typescript 认为我的枚举未定义?

[英]Why does Typescript think my enum is undefined?

我正在使用 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

打字稿的此功能称为“反向映射”,根据文档,它仅支持数字枚举。 这是来自https://www.typescriptlang.org/docs/handbook/enums.html的片段:

除了为成员创建具有属性名称的对象之外,数字枚举成员还获得从枚举值到枚举名称的反向映射。

我无法重现您的确切情况:我在减速器中导入了一个枚举并创建了记录该枚举的确切函数,并且它起作用了。

但是,我只是在稍微不同的上下文中遇到了同样的问题:我在 SideNav 文件中为我的 AppRoutes 枚举添加了导入。 在 SideNav 文件中,在通过一些 JSON 映射并返回一些 TSX 的const popularArticles popularArticles 中,当我尝试<NavLink to={AppRoutes.something}> ,即使将鼠标悬停在 AppRoutes.something 上,我也得到“无法读取未定义的属性”在 IDE 中会显示来自正确来源的正确值。 我认为这与您的情况非常相似,所以我希望我的解决方案能帮助未来的读者遇到这个问题。

为我解决的问题是在const popularArticlesconst popularArticles popularArticles(在 SideNav 类之外)集成到类内的变量public popularArticles popularArticles 中。 我不知道为什么,但经过进一步的实验,我发现显然您无法在类或 SFC 之外访问枚举......

我所做的是这样的:

import {AnimalTypes} from './actions';

export function someFunction() {
    var animalTypesEnum = AnimalTypes;
    // Print the word "CAT"
    console.log(animalTypesEnum[animalTypesEnum.CAT]);
}

它奏效了。 TS v3.6.4

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM