【问题标题】:Unable to use BigInt in typescript version 3.1.6. error TS2304: Cannot find name 'BigInt'无法在打字稿版本 3.1.6 中使用 BigInt。错误 TS2304:找不到名称“BigInt”
【发布时间】:2020-07-15 17:34:42
【问题描述】:

我想在 Typescript 中使用 BigInt

    private AND = (left: BitwiseNumber, right: BitwiseNumber) => {
     return BigInt(left) & BigInt(right);
    }

但它给了我这个错误:

src/dir/file-name.ts(190,10):错误 TS2304:找不到名称“BigInt”。

要解决对引用this 文档的this 问题的检查答案,并建议我在文件tsconfig.json 中添加"target": "esnext""lib": ["esnext.bigint"]

但我的tsconfig.json 文件已经在targetlib 中包含这些值,如下所示:

    "target": "es2018",
    "lib": ["es2018"],

现在,如果我将 target 的值从 es-2018 更改为 esnext。它开始抛出其他错误。那么,我的问题是我还能在3.1.6 版本中使用BigInt 吗? If Not 在这个版本中BigInt 有替代品吗?

我的 Typescript 版本是3.1.6

【问题讨论】:

  • 10 秒的搜索表明已将 bigint 支持添加到 Typescript 3.2
  • @Damien_The_Unbeliever,在打字稿版本3.1.6 中是否可以使用 BigInt?

标签: typescript biginteger bigint


【解决方案1】:

如 cmets 中所述,BigInt 支持已添加到 TypeScript with the release of TypeScript 3.2

如果您无法升级(很遗憾,因为 TypeScript 变化太快以至于这成为技术债务的重要来源),那么您不能直接使用 BigInt

这里的一种方法是改用第三方任意精度整数库。这不可能是完全透明的替代;不可能 polyfill 语法。因此,您将无法使用像 123n 这样的 BigInt 字面量或像 BigInt(3) * BigInt(5) 这样的重载数字运算符。相反,您需要使用提供此类行为的方法或函数。

我不认为这是提倡特定图书馆的地方,所以我将使用我在搜索时首先找到的那个:BigInteger.js,在 npm 中以big-integer 发布:

import bigInt from "big-integer";

那么您的上述代码将需要使用and() method 进行按位和而不是& 运算符:

  private AND = (left: BitwiseNumber, right: BitwiseNumber) => {
    return bigInt(left).and(bigInt(right));
  };

好的,希望这会有所帮助;祝你好运!

Playground link to code

【讨论】:

  • @jacalz!感谢您为此提供详细且写得很好的答案+1。在做了一些搜索后,我发现有人建议升级 typescript 来解决这样的问题,这很公平,但由于某些原因,我现在不升级它。所以,留给我的方法是使用 3rd 方库,我使用了 npm 中的大整数,因为它具有我所需的按位 AND OR NOT 操作,令我惊讶的是,您也推荐了相同的方法。但是也发生了错误,上面写着:node_modules/big-integer/BigInteger.d.ts(27,18): error TS2304: Cannot find name 'bigint'。你知道怎么解决吗?
  • 我通过在 tsconfig.json 中添加 "skipLibCheck": true 解决了这个问题。感谢这个问题github.com/dubzzz/fast-check/issues/277#issuecomment-450238756
  • 我遇到的另一个问题是,TypeError: big_integer_1.default is not an function at AND (/home/al/htmc/api/build/routes/utils.js:12:55)。通过将import bigInt from "big-integer;" 替换为import * as bigInt from 'big-integer'; 解决了这个问题。我在这里记录这些问题,以便将来如果他/她面临类似问题,它可能会对某人有所帮助。
猜你喜欢
  • 1970-01-01
  • 2017-12-01
  • 1970-01-01
  • 2021-12-05
  • 2019-02-13
  • 1970-01-01
  • 2016-09-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多