TypeScript:在JSON中序列化BigInt

v1uwarro  于 2023-03-24  发布在  TypeScript
关注(0)|答案(3)|浏览(201)

我正在寻找一种方法来强制JSON.stringify总是打印BigInt s没有抱怨。
我知道它是非标准的,我知道在纯JavaScript中有一个包;但它不符合我的需要。我什至知道通过设置BigInt.prototype.toJSON来修复原始JavaScript。我需要的是某种方法来在我的TypeScript代码中全局覆盖正常的JSON.stringify函数。
我在一年前发现了下面的代码:

declare global
{
    interface BigIntConstructor
    {
        toJSON:()=>BigInt;
    }
}

BigInt.toJSON = function() { return this.toString(); };

在一些网页上,我不能设法再找到。它曾经在我的另一个项目中工作,但它似乎不再工作了。我不知道为什么。
无论我对上面的行做了什么,如果我试图打印一个包含BigInt的JSON,我会得到:TypeError: Do not know how to serialize a BigInt .
任何帮助是赞赏-提前非常感谢。

2izufjch

2izufjch1#

您可以像这样使用replacer参数作为JSON.stringify

const obj = {
  foo: 'abc',
  bar: 781,
  qux: 9n
}

JSON.stringify(obj, (_, v) => typeof v === 'bigint' ? v.toString() : v)
eit6fx6z

eit6fx6z2#

这就是你要找的:

BigInt.prototype.toJSON = function() { return this.toString() }

https://github.com/GoogleChromeLabs/jsbi/issues/30#issuecomment-953187833

ddhy6vgd

ddhy6vgd3#

我需要让JSON.stringify在其中一个依赖项中工作,所以我不能使用上面的答案。相反,我创建了一个patch.js文件:

BigInt.prototype.toJSON = function() {
    return this.toString()
}

然后在我的TypeScript源代码的开头,我添加了:

require('patch.js')

之后,JSON.stringify可以毫无问题地处理BigInts。

相关问题