Internet Explorer 11中的64位枚举标志

猫头鹰玻璃

我们正在通过Web API 2从C#后端向客户端浏览器发送64位枚举。该应用程序的要求之一是应在上运行Windows 10 x64 with ie11但是,当我开始时ie11,会得到两个进程,默认情况下是一个64位和一个32位。64位枚举是否可以与ie11一起使用?如果枚举选项不能处理超过32个标志,则我们不建议使用。

在此处输入图片说明

我们TypeScript用来处理标志,并使用Webpack将其编译为ES5。

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
    }
}
EVK

浏览器进程的位无关紧要。但是重要的是javascript没有64位整数之类的东西。Javascript具有number类型,基本上是C#double因此,javascript无法安全地表示大于2 ^ 53-1(Number.MAX_SAFE_INTEGER常数)的整数同样,所有位运算符(<<|等)都将数字作为32位整数使用,这也无济于事。例如,1 << 321javascript计算。

因此,您的64位打字稿枚举是一个雷区,将可能导致难以发现错误,因此,我会避免使用它。

如果无法避免,则必须使用一些能够处理64位数字的库,例如BigJS(但我想您不能使用typescript enum)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章