TypeScript tsconfig ustawienia dla Node.js 12?

13

Jakie są optymalne tsconfigustawienia TypeScript do generowania kodu, który zostanie uruchomiony na Node.js 12?

Linus Unnebäck
źródło

Odpowiedzi:

44

Począwszy od Node.js 12.0.0, obsługiwane jest 100% ES2019. Jeśli wiesz, że celujesz w tę wersję lub nowszą, optymalna konfiguracja wygląda następująco:

  • "module": "commonjs"

    Node.js jest w trakcie dodawania modułów ES, ale na razie będziemy musieli trzymać się CommonJS.

  • "target": "es2019"

    Mówi to TypeScript, że można wypisywać składnię JavaScript z funkcjami z ES2019. W praktyce oznacza to, że będzie np. Wyprowadzał właściwości rest / spread obiektu wyjściowego i asynchronizował / czekał na składnię zamiast osadzania wypełnienia.

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

    Mówi to TypeScript, że można używać funkcji i właściwości wprowadzonych w ES2019 lub wcześniejszej wersji. W praktyce oznacza to, że można użyć np String.prototype.trimStarti Array.prototype.flat.

    Oprócz ES2019, Node.js 12 obsługuje również BigInti matchAllz ES2020, dlatego dołączamy dodatkowe definicje z ES2020.

Pełna konfiguracja wyglądałaby zatem tak:

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

Jeśli celujesz w Node.js 12.9.0lub nowszy , możesz po prostu określić, "lib": ["es2020"]że ta wersja obsługuje wszystkie nowe funkcje i właściwości wprowadzone w ES2020. Jednak nie obsługuje nowej składni JavaScript , więc nadal musisz być włączony "target": "es2019".

Pełna konfiguracja wyglądałaby zatem tak:

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

Jeśli korzystasz z Node.js 14, możesz zobaczyć moją podobną odpowiedź dla Node.js 14 tutaj

Jeśli korzystasz z Node.js 10, możesz zobaczyć moją podobną odpowiedź na Node.js 10 tutaj

Jeśli korzystasz z Node.js 8, możesz zobaczyć moją podobną odpowiedź dla Node.js 8 tutaj

Linus Unnebäck
źródło
Nie "target"wpływa "lib"w żaden sposób, jeżeli "lib"jest pozostawiony pusty w config? Jeśli mam tylko to, "target": "es2020"co "lib"domyślnie? To zawsze było dla mnie źródłem tajemnicy.
Sumomo
@ Sumo ta odpowiedź ( stackoverflow.com/a/50987516/148072 ) zapewnia trochę wglądu. Chociaż nie znalazłem więcej informacji o tym, co nowsze niż „ES6” zapewnia domyślną bibliotekę lib ...
Linus Unnebäck
1
Istnieje również wersja es2020.promise, która jest obsługiwana począwszy od węzła 12.10.0.
Ivan Yarych
1
@IvanYarych w dolnej części mojej odpowiedzi znajduje się sekcja dla Node.js> = 12.9.0, która zawiera es2020, który z kolei zawiera es2020.promise
Linus Unnebäck