【发布时间】:2018-01-24 09:20:36
【问题描述】:
我们正在使用 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);
https://stackoverflow.com/a/36743651/3850405
如果我这样写,一切正常:
enum TSEnum {
None = 0,
Test = 1,
}
console.log(TSEnum[TSEnum.None]);
我能做些什么来解决这个问题?如果这可能会影响某些事情,我正在使用 webpack 进行捆绑。我尝试导入枚举,但没有任何区别。
import '../../../Scripts/Enums';
如果我手动将export 输入到CustomEnum,然后导入枚举,代码可以工作,但在TypeLite.Net4.d.tt 中使用CustomEnum.TSEnum 的声明无法再找到该属性。
import { TouchPoint } from '../../../Scripts/Enums';
枚举.ts:
export namespace CustomEnum {
export enum TSEnum {
None = 0,
Test =1
}
}
【问题讨论】:
标签: javascript c# typescript typelite