3
votes

"Les littéraux BigInt ne sont pas disponibles lors d'un ciblage inférieur à ESNext"

J'ai installé React et TypeScript en utilisant yarn create react-app my-app --typescript .

Ensuite, j'ai écrit ce code:

{
  "name": "my-app",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "@types/jest": "24.0.17",
    "@types/node": "12.7.2",
    "@types/react": "16.9.2",
    "@types/react-dom": "16.8.5",
    "react": "^16.9.0",
    "react-dom": "^16.9.0",
    "react-scripts": "3.1.1",
    "typescript": "3.5.3"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": "react-app"
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  }
}

et a obtenu une erreur:

Les littéraux BigInt ne sont pas disponibles lors d'un ciblage inférieur à ESNext.

Quel est le problème? Comment je le répare?

package.json

import React from 'react';

const App: React.FC = () => {
  const theBiggestInt = 9007199254740991n;
  return (
    <div>
   {"Durkurian"}
    </div>
  );
}

export default App;


2 commentaires

le problème est que bigint est une nouvelle fonctionnalité . si vous ciblez une ancienne version, elle ne sera pas disponible. exactement comme le dit le message d'erreur.


Il semble que je n'ai pas l'ancienne version.


3 Réponses :


-2
votes

Essayez d'utiliser const theBiggestInt = BigInt(9007199254740991); au lieu. J'ai découvert cela ici: https://github.com/facebook/create-react-app/issues/6907

La syntaxe 9007199254740991n est très nouvelle et n'est pas encore prise en charge par create-react-app.

Edit: Comme indiqué dans les commentaires ci-dessous, cette réponse BigInt (9007199254740991) est juste une syntaxe alternative pour 9007199254740991n donc cela ne vous aidera pas. Voir https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt pour plus de détails.

Essayez peut-être d'utiliser https://www.npmjs.com/package/big-integer à la place. Il utilise BigInt lorsqu'il est disponible dans un navigateur et lorsqu'il ne l'est pas, il agit comme un polyfill.


3 commentaires

L'écriture d'un littéral entier de ce grand (évalué à un nombre) n'a pas de sens.


@Bergi J'utilisais juste cela comme exemple. Je l'ai changé pour le numéro que la question avait initialement demandé.


Peu importe de quel chiffre gigantesque il s'agit. L'interpréteur le traitera comme un littéral Number comme passer un Number (avec une précision perdue) au constructeur BigInt.



2
votes

Comme indiqué dans un commentaire, Bigint est une nouvelle fonctionnalité.Vous ne pouvez pas utiliser BigInt tant que vous avez la propriété cible dans tsconfig.json dans une valeur autre que ESNext.Mais vous ne devriez pas le faire car il y a peu de développeur de support de navigateur.mozilla .org et caniuse.com .


1 commentaires

Pourquoi est-ce un problème? Le travail de tsc n'est-il pas de transpiler de TypeScript (qui prend en charge les littéraux BigInt) vers une cible donnée? En passant, c'est drôle car nodejs 12 les prend également en charge



0
votes

Vous ne pouvez pas utiliser BigInt comme vous dans tsconfig.json dans la valeur cible de la propriété compilerOptions différente de ESNext. Mais ce n'est pas nécessaire, car Mozilla, IE et sur Edge BigInt ne savent rien.

Dans votre tsconfig.json

{
  "compilerOptions": {
    ...
    ...
    ...
    "target": "ESNEXT",                          /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */
    "module": "commonjs",                       /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */
    ...
    ...
    ...
   }
}


0 commentaires