我们使用TypeLite在TypeScript中生成Enum。
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进行捆绑。我试过导入Enum,但是没有什么区别。
import '../../../Scripts/Enums';如果我手动将export输入到CustomEnum,然后导入enum,代码就会正常工作,但是在TypeLite.Net4.d.tt中使用CustomEnum.TSEnum的声明将无法再找到该属性。
import { TouchPoint } from '../../../Scripts/Enums';Enums.ts:
export namespace CustomEnum {
export enum TSEnum {
None = 0,
Test =1
}
}发布于 2018-01-24 10:18:25
找不到一个好的解决方案,所以我决定创建一个新的枚举对象,可以在前端使用。我从.AsConstEnums(false)中删除了TypeLite.Net4.d.tt并创建了以下代码:
export enum TSEnumObject {
None = CustomEnum.TSEnum.None,
Test = CustomEnum.TSEnum.Test
}
console.log(TSEnumObject[TSEnumObject.None]);https://stackoverflow.com/questions/48418792
复制相似问题