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

时间:2018-01-24 09:20:36

标签: javascript c# typescript typelite

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

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

  

未捕获的ReferenceError:未定义TSEnum

代码生成错误:

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然后导入枚举,则代码有效但CustomEnum.TSEnum中使用TypeLite.Net4.d.tt的声明无法再找到该属性。< / p>

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

Enums.ts:

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

1 个答案:

答案 0 :(得分:0)

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

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

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