Vyhledávání na webu

Chyba Angular TypeScript s BigInt a volitelným řetězením, slučováním s nullish hodnotou


Máme aplikaci, která musí být podporována ve starém Chromu (verze 79).

Verze Angular 13.2.7 Verze Typescript 4.5.5 Verze Node 16.14.0

Dostáváme chybu:

ERROR: Big integer literals are not available in the configured target environment

Když nastavíme cíl jako 2017 (cokoliv menší než 2020) a optimalizace je povolena pro sestavení. BigInt jsou součástí specifikace es2020 a nemohl jsem najít polyfill, který by fungoval.

Když nastavíme cíl jako es2020, chyba s BigInt je vyřešena, Angular build je úspěšný, ale aplikace se nedaří otevřít v Chrome 79 kvůli chybě Neznámý znak. To se děje, protože pro es2020 TypeScript netranspiluje operátory optional chaining (?.) a nullish coalescing, protože tyto operátory jsou nativně podporovány v cíli es2020. Takže nemůžeme zůstat u es2017 ani přejít na es2020. Zkoušel jsem použít transpilaci pomocí Babel s Angular, WebPack, ale nic nefungovalo. Dokáže někdo tento problém vyřešit?

Odpověď č. 1

Chybu můžete zabránit přidáním es2020.bigint do pole lib ve vašem tsconfig.json:

{
  "target": "es2017",
  "lib": ["es2017", "dom", "es2020.bigint"]
}

To by mělo cílit na ES2017 a navíc zahrnovat typy jen pro bigint.

Odpověď č. 2

Zkuste sestavit aplikaci po přidání této konfigurace browserslint do package.json.

Pro klíč production přidejte do seznamu hodnotu supports bigint.

"browserslist": {
    "production": [
      "supports bigint",
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  }

Související články