javascript - Modulparsing mislyktes ved bruk av bigint-literal i Angular


Jeg jobber med et personlig prosjekt for å prøve å lære Angular-rammeverket. Jeg er for øyeblikket en total nybegynner med det, men jeg har klart (tror jeg) å inkludere javascript bigint-nummer type korrekt i typescript (ved å målrette esnext-versjonen i tsconfig.json-filen) siden dette fungerer fint:

export class Particule {

  public name: String;
  public amount: bigint;
  public cost: bigint;

  constructor(name: String, amount: bigint, cost: bigint)
  {
      this.amount=amount;
      this.name=name;
      this.cost=cost;
  }

  public increment(): void {
      this.amount += BigInt(1); // <<< this line compiles, no problem
  }

  /* ... */

}

Men hvis jeg erstatter innholdet i increment()-metoden med: this.amount += 1n; får jeg følgende feil:

ERROR in ./src/app/entities/particule.ts 8:24
Module parse failed: Identifier directly after number (8:24)
You may need an appropriate loader to handle this file type.
|     }
|     increment() {
>         this.amount += 1n;
|     }

Det er ikke et egentlig 'stort' problem (ser du hva jeg gjorde der :D) siden alt fungerer med BigInt()-kallet, men jeg lurte på om det finnes en måte å bruke rene bigint-literal direkte i prosjektet mitt!

Takk for svarene.

Svar #1

Dette er fordi BigInt ennå ikke er en del av ECMAScript-standarden, det er et forslag på trinn 3.

Derfor er TypeScript-støtte for øyeblikket begrenset til å målrette esnext.

Hvis du retter deg mot esnext, bør BigInt-litteraler fungere. Hvis du ikke gjør det, vil feilmeldingen være:

BigInt-literalene er ikke tilgjengelige når man målretter lavere enn ESNext.

Kanskje en gammel versjon av typescript er i bruk?

Svar #2

Som et tillegg til det forrige svaret er noen endringer i Angular-prosjektet nødvendig:

i package.json "typescript": "4.3.5" eller høyere

i tsconfig.json oppdatering

"module": "esnext", 
"lib": ["ESNext","dom"]
"target": "esnext"