首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeLite -> TypeScript Enum ->运行时错误:未定义未定义的ReferenceError: TSEnum

TypeLite -> TypeScript Enum ->运行时错误:未定义未定义的ReferenceError: TSEnum
EN

Stack Overflow用户
提问于 2018-01-24 09:20:36
回答 1查看 745关注 0票数 1

我们使用TypeLite在TypeScript中生成Enum。

C#:

代码语言:javascript
复制
[TsEnum(Module = "CustomEnum")]
public enum TSEnum {
    None,
    Test
}

http://type.litesolutions.net/

在名为Enums.ts的文件中生成此代码:

代码语言:javascript
复制
namespace CustomEnum {
    export enum TSEnum {
        None = 0,
        Test =1
    }
}

默认情况下,TypeLite生成一个const enum,但是为了能够获得TypeScript枚举条目的名称,const被删除了。这是通过编辑TypeLite.Net4.tt并更改:

代码语言:javascript
复制
<# var ts = TypeScript.Definitions()
        .WithReference("Enums.ts")
        .ForLoadedAssemblies();
#>

对此:

代码语言:javascript
复制
<# var ts = TypeScript.Definitions()
        .WithReference("Enums.ts")
        .ForLoadedAssemblies()
        .AsConstEnums(false);
#>

https://bitbucket.org/LukasKabrt/typelite/issues/96/allow-option-of-export-const-enum-to-be

https://www.typescriptlang.org/docs/handbook/enums.html#const-enums

我没有收到任何编译警告,但在运行时我得到以下错误

未定义的ReferenceError: TSEnum未定义

代码生成错误:

代码语言:javascript
复制
console.log(CustomEnum.TSEnum[CustomEnum.TSEnum.None]);

或者简单地说:

代码语言:javascript
复制
console.log(CustomEnum.TSEnum.None);

https://stackoverflow.com/a/36743651/3850405

然而,如果我像这样写它,一切都会正常运行:

代码语言:javascript
复制
enum TSEnum {
    None = 0,
    Test = 1,
}

console.log(TSEnum[TSEnum.None]);

我能做些什么来解决这个问题?如果这可能会影响到什么,我使用webpack进行捆绑。我试过导入Enum,但是没有什么区别。

代码语言:javascript
复制
import '../../../Scripts/Enums';

如果我手动将export输入到CustomEnum,然后导入enum,代码就会正常工作,但是在TypeLite.Net4.d.tt中使用CustomEnum.TSEnum的声明将无法再找到该属性。

代码语言:javascript
复制
import { TouchPoint } from '../../../Scripts/Enums';

Enums.ts:

代码语言:javascript
复制
export namespace CustomEnum {
    export enum TSEnum {
        None = 0,
        Test =1
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-24 10:18:25

找不到一个好的解决方案,所以我决定创建一个新的枚举对象,可以在前端使用。我从.AsConstEnums(false)中删除了TypeLite.Net4.d.tt并创建了以下代码:

代码语言:javascript
复制
export enum TSEnumObject {
    None = CustomEnum.TSEnum.None,
    Test = CustomEnum.TSEnum.Test
}

console.log(TSEnumObject[TSEnumObject.None]);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48418792

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档