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