TypeScript tsconfig Einstellungen für Node.js 12?


13

Was sind die optimalen TypeScript- tsconfigEinstellungen für die Ausgabe von Code, der auf Node.js 12 ausgeführt wird?

Antworten:


44

Ab Node.js 12.0.0werden 100% von ES2019 unterstützt. Wenn Sie wissen, dass Sie auf diese oder eine neuere Version abzielen, sieht die optimale Konfiguration folgendermaßen aus:

  • "module": "commonjs"

    Node.js ist auf dem Weg, ES-Module hinzuzufügen, aber jetzt müssen wir uns an CommonJS halten.

  • "target": "es2019"

    Dies teilt TypeScript mit, dass es in Ordnung ist, JavaScript- Syntax mit Funktionen von ES2019 auszugeben. In der Praxis bedeutet dies, dass beispielsweise Objekt-Rest / Spread-Eigenschaften und asynchrone / warten-Syntax ausgegeben werden, anstatt eine Polyfüllung einzubetten.

  • "lib": ["es2019", "es2020.bigint", "es2020.string", "es2020.symbol.wellknown"]

    Dies teilt TypeScript mit, dass es in Ordnung ist, Funktionen und Eigenschaften zu verwenden, die in ES2019 oder früher eingeführt wurden. In der Praxis bedeutet dies, dass Sie zB String.prototype.trimStartund verwenden können Array.prototype.flat.

    Zusätzlich zu ES2019 unterstützt Node.js 12 auch BigInt& matchAllvon ES2020, daher enthalten wir die zusätzlichen Definitionen von ES2020.

Die vollständige Konfiguration wäre also:

{
  "compilerOptions": {
    "lib": ["es2019", "es2020.bigint", "es2020.string", "es2020.symbol.wellknown"],
    "module": "commonjs",
    "target": "es2019"
  }
}

Wenn Sie auf Node.js 12.9.0oder eine neuere"lib": ["es2020"] Version abzielen , können Sie einfach angeben , dass diese Version alle neuen Funktionen und Eigenschaften unterstützt, die in ES2020 eingeführt wurden. Die neue JavaScript- Syntax wird jedoch nicht unterstützt , sodass Sie weiterhin aktiv bleiben müssen "target": "es2019".

Die vollständige Konfiguration wäre also:

{
  "compilerOptions": {
    "lib": ["es2020"],
    "module": "commonjs",
    "target": "es2019"
  }
}

Wenn Sie Node.js 14 ausführen, können Sie meine ähnliche Antwort für Node.js 14 hier sehen

Wenn Sie Node.js 10 ausführen, können Sie meine ähnliche Antwort für Node.js 10 hier sehen

Wenn Sie Node.js 8 ausführen, können Sie meine ähnliche Antwort für Node.js 8 hier sehen


Hat "target"beeinflussen "lib"in irgendeiner Weise , wenn "lib"in der Konfiguration leer gelassen? Wenn ich nur habe, "target": "es2020"was macht "lib"standardmäßig? Dies war für mich immer eine Quelle des Geheimnisses.
Sumomo

@Sumomo Diese Antwort ( stackoverflow.com/a/50987516/148072 ) bietet ein wenig Einblick. Obwohl ich keine weiteren Informationen darüber gefunden habe, was neuer als "ES6" für die Standardbibliothek bietet ...
Linus Unnebäck

1
Dort gibt es jetzt auch es2020.promise, das ab Knoten 12.10.0 unterstützt wird.
Ivan Yarych

1
@IvanYarych Der untere Teil meiner Antwort enthält einen Abschnitt für Node.js> = 12.9.0, der es2020 enthält, der wiederum es2020 enthält. Versprechen
Linus Unnebäck
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.