Невозможно использовать BigInt в машинописной версии 3.1.6. ошибка TS2304: не удается найти имя BigInt - PullRequest
0 голосов
/ 03 апреля 2020

Я хочу использовать BigInt в Typescript

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

Но это дало мне эту ошибку:

src / dir / file-name.ts (190,10): ошибка TS2304: не удается найти имя 'BigInt'.

Чтобы решить этот проверенный ответ на этот вопрос, который цитировал этот документ и предложил мне добавить "target": "esnext" & "lib": ["esnext.bigint"] в файле tsconfig.json.

, но мой tsconfig.json файл уже имеет эти значения в target и lib, как показано ниже:

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

Теперь, если Я изменяю значение target с es-2018 на esnext. Это начало бросать другие ошибки. Итак, мой вопрос, я все еще могу использовать BigInt в версии 3.1.6? Если нет, есть ли альтернатива для BigInt в этой версии?

Моя версия Typescript - 3.1.6

1 Ответ

1 голос
/ 03 апреля 2020

Как уже упоминалось в комментариях, поддержка BigInt была добавлена ​​в TypeScript с выпуском TypeScript 3.2 .

Если вы не можете выполнить обновление (что вызывает сожаление, поскольку TypeScript изменяется достаточно быстро, чтобы стать значительным источником технической задолженности), вы не можете использовать BigInt напрямую.

One подход заключается в использовании сторонней целочисленной библиотеки произвольной точности. Это не может быть полностью прозрачной заменой; невозможно заполнить синтаксис. Таким образом, вы не сможете использовать литералы BigInt, такие как 123n, или перегруженные числа c, такие как BigInt(3) * BigInt(5). Вместо этого вам нужно будет использовать методы или функции, которые дают такое поведение.

Я не думаю, что это место для защиты определенной библиотеки, поэтому я просто буду использовать тот, который я нашел первым при поиске : BigInteger. js, опубликовано в npm как big-integer:

import bigInt from "big-integer";

Тогда приведенный выше код должен будет использовать метод and() для побитового оператора вместо оператора &:

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

Хорошо, надеюсь, это поможет; удачи!

Детская площадка ссылка на код

...