[英]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 popularArticles
将const 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.