我们正在通过Web API 2从C#后端向客户端浏览器发送64位枚举。该应用程序的要求之一是应在上运行Windows 10 x64 with ie11
。但是,当我开始时ie11
,会得到两个进程,默认情况下是一个64位和一个32位。64位枚举是否可以与ie11一起使用?如果枚举选项不能处理超过32个标志,则我们不建议使用。
我们TypeScript
用来处理标志,并使用Webpack将其编译为ES5。
我们使用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
}
}
浏览器进程的位无关紧要。但是重要的是javascript没有64位整数之类的东西。Javascript具有number
类型,基本上是C#double
。因此,javascript无法安全地表示大于2 ^ 53-1(Number.MAX_SAFE_INTEGER
常数)的整数。同样,所有位运算符(<<
,|
等)都将数字作为32位整数使用,这也无济于事。例如,1 << 32
以1
javascript计算。
因此,您的64位打字稿枚举是一个雷区,将可能导致难以发现错误,因此,我会避免使用它。
如果无法避免,则必须使用一些能够处理64位数字的库,例如BigJS(但我想您不能使用typescript enum
)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句