【问题标题】:TypeLite -> TypeScript Enum -> Runtime error: Uncaught ReferenceError: TSEnum is not definedTypeLite -> TypeScript 枚举 -> 运行时错误:未捕获的 ReferenceError:未定义 TSEnum
【发布时间】:2018-01-24 09:20:36
【问题描述】:

我们正在使用 TypeLite 在 TypeScript 中生成枚举。

C#:

[TsEnum(Module = "CustomEnum")]
public enum TSEnum {
    None,
    Test
}

http://type.litesolutions.net/

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

namespace CustomEnum {
    export enum TSEnum {
        None = 0,
        Test =1
    }
}

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

<# var ts = TypeScript.Definitions()
        .WithReference("Enums.ts")
        .ForLoadedAssemblies();
#>

到这里:

<# 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

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

Uncaught ReferenceError: TSEnum is not defined

代码生成错误:

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

或者简单地说:

console.log(CustomEnum.TSEnum.None);

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

如果我这样写,一切正常:

enum TSEnum {
    None = 0,
    Test = 1,
}

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

我能做些什么来解决这个问题?如果这可能会影响某些事情,我正在使用 webpack 进行捆绑。我尝试导入枚举,但没有任何区别。

import '../../../Scripts/Enums';

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

import { TouchPoint } from '../../../Scripts/Enums';

枚举.ts:

export namespace CustomEnum {
    export enum TSEnum {
        None = 0,
        Test =1
    }
}

【问题讨论】:

    标签: javascript c# typescript typelite


    【解决方案1】:

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

    export enum TSEnumObject {
        None = CustomEnum.TSEnum.None,
        Test = CustomEnum.TSEnum.Test
    }
    
    console.log(TSEnumObject[TSEnumObject.None]);
    

    【讨论】:

    • FWIW 我发现 webpack 似乎忽略了任何具有 /// &lt;reference ... 标记的文件的导入,因此只有在将常量移动到单独的文件。
    猜你喜欢
    • 1970-01-01
    • 2020-02-02
    • 2014-10-21
    • 2023-03-04
    • 2019-12-28
    • 1970-01-01
    • 2019-02-28
    • 2022-08-08
    • 2012-08-27
    相关资源
    最近更新 更多