运行时未定义枚举类型

2024-01-11

我遇到一个问题,Typescript 编译器成功编译了我的代码,但运行时却给出了未定义的类型错误。

在我的应用程序中我创建了一个types.ts文件,其中一些内容在多个其他 ts 文件之间共享。它包含一个字符串枚举,例如:

enum MyEnum {
  One = "one";
  Two = "two";
}

当我这样定义它时。编译器允许我在其他 ts 文件中使用它,并且看起来很高兴。但是,在运行时我收到错误“MyEnum 未定义”。

我知道有两种方法可以解决这个问题:

  1. 在使用它的文件中定义枚举。但我认为这不会为其他想要使用它的文件解决任何问题。
  2. 在 types.ts 文件中使用“export”,并在使用每个类型的地方显式导入该类型。

我对 Typescript 还很陌生,我觉得我可能误解了一些基本的东西。

首先,我不明白为什么 Typescript 编译器会在出现运行时错误时愉快地编译我的代码。如果我使用过的话我就会理解declare关键字,告诉编译器有些东西should在运行时可用,但在这种情况下,我不明白为什么它应该假设枚举来自 types.ts 文件以外的任何地方。

其次,我想在我的应用程序中全局定义类型,并让它们在任何地方都可用,而不必每次使用它们时都导入它们。我该如何实现这个目标?或者这可能被认为是不好的做法?

我正在使用 Typescript 2.6,我的配置如下所示:

{
  "compilerOptions": {
    /* Basic Options */
    "target": "es6",
    "module": "commonjs",
    "lib": ["es6", "es7", "esnext"],

    "sourceMap": true /* Generates corresponding '.map' file. */,
    "outDir": "build" /* Redirect output structure to the directory. */,
    "removeComments": true /* Do not emit comments to output. */,

    /* Strict Type-Checking Options */
    "strict": true /* Enable all strict type-checking options. */,

    /* Additional Checks */
    "noUnusedLocals": true /* Report errors on unused locals. */,
    "noUnusedParameters": true /* Report errors on unused parameters. */,
    "noImplicitReturns": true /* Report error when not all code paths in function return a value. */,
    "noFallthroughCasesInSwitch": true /* Report errors for fallthrough cases in switch statement. */,

    "plugins": [{ "name": "tslint-language-service" }],
    "skipLibCheck": true // because firebase-sdk has wrong type files now (Nov 18)
  },
  "include": ["src/**/*"],
  "exclude": ["build"]
}

就我而言undefinedenum,结果发现这是因为循环导入:

export enum A {...}文件中定义a.ts, export const b = ...文件中定义b.ts;

import {A} from './a.ts' in b.ts, while import {b} from './b.ts' in a.ts.

删除循环导入后错误消失。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

运行时未定义枚举类型 的相关文章

  • Angular 5 - 加载视图后加载脚本

    我有一个遗留脚本 需要将其包含在我的角度应用程序中 该脚本的特点是它与特定组件相关 并且只有在加载该组件的视图之后才必须加载它 就今天而言 我成功地将它包含在 OnInit 函数中 但有时 并非总是出于某种原因 CLI 会抛出有关它的错误
  • React 16.7 - React.SFC 现已弃用

    我用来声明无状态组件 如下所示 const example React SFC
  • 错误 TS2339:“导航器”类型上不存在属性“连接”

    很简单的问题 我正在尝试 ang 2 和 ionic 2 使用以下代码 主文件
  • Typescript 递归地更改属性类型

    如何递归地改变属性类型 我只能在单一维度上做到这一点 从实用程序类型 https github com piotrwitek utility types似乎有可能实现这一目标 我已经尝试过多次但无法做到正确 type Convert
  • Typescript 在 VS2012 中无法正确编译

    没有明确的原因 Typescript 突然停止可靠地编译成 JS 代码 使用 VS2012 Typescript for VS 版本 0 8 3 1 和 Web Essentials 版本 2 6 设置为 保存时编译 我可以创建一个新的 T
  • 在 Typescript 中创建动态变量引用

    提前感谢任何提供帮助的人 对于有经验的人来说 这似乎是一个简单的答案 但我已经浏览了互联网和几本参考书 并没有找到这个问题的直接答案 所以希望它也对其他人有帮助 我目前正在从 Actionscript 过渡到 Typescript 并且对普
  • TS1128:预期声明或声明(文件结尾)

    我正在开发一个 TypeScript React 项目 刚刚习惯它 已经一年没有写过 React 了 等等 并且遇到了一个问题 当我编写此组件时 我遵循了我找到的一些文档 但我在此文件末尾收到 TS1128 预期声明或声明 错误 我无法弄清
  • Typescript 中的子类化

    我在 Typescript 中有一个存储类 它实现了Storage界面 说MyStorage 但它的方法太多了 所以我想用它来代替MyStorage getCandy MyStorage Candies getCandies 该结构可能看起
  • 与 webpack 捆绑后,无法读取枚举的未定义属性

    我有一个 React 库 我想使用 Webpack 来构建它 该库是使用 Typescript 编写的 似乎一切正常 但由于某种原因枚举却不起作用 当我将库安装到我的 React 应用程序中时 我发现Cannot read properti
  • 如何在 Angular 2 中处理 200 以外的 http 状态码

    现在我做http请求的方式 借用这个答案 https stackoverflow com a 34758630 4937981 这是 POST url data var headers new Headers authtoken local
  • QUnit 不会运行测试

    我刚刚开始使用 QUnit 并遇到问题 我目前正在使用 TypeScript 它是一个 JavaScript 编译器 我在与我的主要课程结构平行的课程中进行测试 在每个类中 我都有一个名为 runTests 的函数 为了执行这些测试 我循环
  • Angular 没有 NameService 提供者

    我在将类加载到 Angular 组件中时遇到问题 我已经尝试解决这个问题很长时间了 我什至尝试过将所有内容合并到一个文件中 我所拥有的是 应用程序 ts
  • 如何使 Angular Reactive Formarray 中的级联下拉菜单工作而不弄乱下拉值

    我有一个角度 4 的表单 其中包含名字 姓氏和一个包含 2 个下拉菜单 选择 的表单数组 用作级联下拉菜单和一个删除按钮 表单的其余部分还包含一个发送按钮和一个添加选项按钮 我在此处添加了屏幕截图 以便您更好地理解 表单添加 删除按钮和发送
  • 在从命令行运行的 NestJS 脚本中使用服务

    我知道如何从命令行运行脚本 使用npm or npx ts node script ts 正如所述here https stackoverflow com questions 60704316 run nestjs script from
  • 如何将 zingchart 实现到 Angular2 中

    我有一个现有的项目 我想在其上实施 zingcharts 我尝试了 3 个不同的教程 主要来自 https blog zingchart com 2016 07 19 zingchart and angular 2 charts back
  • 角度2中未定义的值

    我正在创建一个应用程序 在其中使用 Ag Grid api 在网页上列出我的数据库内容 Ag grid 有一个预定义的 api 来获取所选行的内容 这是我的代码 export class customer entryComponent pu
  • 在 Angular 6 服务中获取当前路由参数的最佳方法是什么?

    我试图找出在 Angular 6 中获取当前路由参数的最佳方法是什么 目前我必须通过ActivatedRoute到服务的方法作为参数 然后在服务中使用它 export class MainComponent constructor priv
  • Angular 8 Native Typescript 无崩溃,访问器简写

    角8 我曾经在打字稿方面用作简短的黑客 object accessor accessor accessor to get object accessor accessor accessor 如果其中一个子级为空 则不会冒抛出错误的风险 根据
  • 渲染作为 Prop 传入的 Component

    我怎样才能渲染一个StyledComponent它是作为道具传入的吗 我正在传递一个Spinner组件到我的BarComponent作为渲染的道具 我尝试使用 this props icon in my BarComponent在下面的示例
  • 想要动态处理与分页相关的页码显示:ReactJS

    我有一些分页逻辑工作得很好 唯一的问题是我只能让它显示并固定数量的页面可供选择 现在我已经把它放到了 5 页 但我希望它能够根据总记录动态更改 假设我有 100 条记录 每页限制为 10 条 将有 10 页 现在我只能让它以这种方式显示 第

随机推荐