gpt4 book ai didi

typescript - 运行时未定义枚举类型

转载 作者:搜寻专家 更新时间:2023-10-30 20:31:27 26 4
gpt4 key购买 nike

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

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

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

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

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

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

我是 Typescript 的新手,我觉得我可能误解了一些基本的东西。

首先,我不明白为什么 Typescript 编译器会在出现运行时错误时愉快地编译我的代码。如果我使用 declare 关键字告诉编译器某些东西应该在运行时可用,我会理解它,但在这种情况下我不明白为什么它应该假设枚举来自 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"]
}

最佳答案

还有另一种方法可以做到这一点。如果您不想导出您的枚举,您可以将其定义为常量枚举

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

这些由编译器内联,并在编译期间被完全删除。

关于typescript - 运行时未定义枚举类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47418124/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com