TypeLite -> TypeScript Enum -> Runtime error: Uncaught ReferenceError: TSEnum is not defined

TypeLite -> TypeScript Enum -> Runtime error: Uncaught ReferenceError: TSEnum is not defined

我们正在使用 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);

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

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

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

我该怎么做才能解决这个问题?如果这会影响某些东西,我将使用 webpack 进行捆绑。我尝试导入枚举,但没有任何区别。

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

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

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

Enums.ts:

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

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

export enum TSEnumObject {
    None = CustomEnum.TSEnum.None,
    Test = CustomEnum.TSEnum.Test
}

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