TypeLite -> TypeScript Enum -> Runtime error: Uncaught ReferenceError: TSEnum is not defined
TypeLite -> TypeScript Enum -> Runtime error: Uncaught ReferenceError: TSEnum is not defined
我们正在使用 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);
如果我这样写,一切正常:
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';
Enums.ts:
export namespace CustomEnum {
export enum TSEnum {
None = 0,
Test =1
}
}
找不到好的解决方案,所以我决定创建一个可以在前端使用的新枚举对象。我从 TypeLite.Net4.d.tt
中删除了 .AsConstEnums(false)
并创建了以下代码:
export enum TSEnumObject {
None = CustomEnum.TSEnum.None,
Test = CustomEnum.TSEnum.Test
}
console.log(TSEnumObject[TSEnumObject.None]);
我们正在使用 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);
如果我这样写,一切正常:
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';
Enums.ts:
export namespace CustomEnum {
export enum TSEnum {
None = 0,
Test =1
}
}
找不到好的解决方案,所以我决定创建一个可以在前端使用的新枚举对象。我从 TypeLite.Net4.d.tt
中删除了 .AsConstEnums(false)
并创建了以下代码:
export enum TSEnumObject {
None = CustomEnum.TSEnum.None,
Test = CustomEnum.TSEnum.Test
}
console.log(TSEnumObject[TSEnumObject.None]);