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"
]
}
