我们正在通过Web API从我们的C#后端向我们的客户端浏览器发送一个64位枚举。该应用程序的一个要求是它应该在Windows 10 x64 with ie11
上运行。但是,当我启动ie11
时,我得到两个进程,默认情况下为一个64位和一个32位。 64位枚举是否可以与ie11一起使用?如果它不能处理超过32个标记,我们就不会使用枚举选项。
我们正在使用TypeScript
处理标志并使用Webpack将其编译为ES5。
What are enum Flags in TypeScript?
我们使用TypeLITE生成TypeScript定义。
http://type.litesolutions.net/
C#型号:
[Flags]
[TsEnum(Module = "Application")]
public enum ValidationErrorType : Int64
{
None = 0,
NoCaseForRenewalCycle = 1 << 0, // 1
RegistrationNumberExists = 1 << 1, // 2
ApplicationNumberMissing = 1 << 2, // 4
FeeCalculationNoPrice = 1 << 3, // 8
//...
}
TypeLite.Net4,Enums.ts:
namespace Application {
export const enum ValidationErrorType {
None = 0,
NoCaseForRenewalCycle = 1,
RegistrationNumberExists = 2,
ApplicationNumberMissing = 4,
FeeCalculationNoPrice = 8
}
}
答案 0 :(得分:1)
浏览器处理位数在这里根本不重要。但重要的是javascript没有64位整数这样的东西。 Javascript有number
类型,基本上是C#double
。因此,javascript无法安全地表示大于2 ^ 53-1(Number.MAX_SAFE_INTEGER
常数)的整数。此外,所有位运算符(<<
,|
等)都使用数字作为32位整数,这对于这种情况也没有帮助。例如,1 << 32
在javascript中评估为1
。
因此,您的64位打字稿枚举是一个雷区,可能导致很难检测到错误,因此我会避免它。
如果你无法避免它 - 你必须使用一些能够使用64位数字的库,比如BigJS(但我想你不能使用typescript enum
)。