我们正在使用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的声明不再可以找到该属性。

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


枚举:

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

最佳答案

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

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

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

关于javascript - TypeLite-> TypeScript枚举->运行时错误:未捕获ReferenceError:未定义TSEnum,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48418792/

10-11 01:45