Ketik pengaturan tsconfig untuk Node.js 12?

13

Apa tsconfigpengaturan TypeScript optimal untuk menghasilkan kode yang akan dijalankan pada Node.js 12?

Linus Unnebäck
sumber

Jawaban:

45

Pada Node.js 12.0.0, 100% dari ES2019 didukung. Jika Anda tahu bahwa Anda menargetkan versi itu atau yang lebih baru, konfigurasi optimal akan terlihat seperti ini:

  • "module": "commonjs"

    Node.js sedang menambahkan ES-Modul, tetapi untuk saat ini kita harus tetap menggunakan CommonJS.

  • "target": "es2019"

    Ini memberitahu TypeScript bahwa tidak apa-apa untuk menghasilkan sintaks JavaScript dengan fitur dari ES2019. Dalam prakteknya, ini berarti bahwa ia akan mis: output objek rest / spread properties & async / menunggu sintaks alih-alih menyematkan polyfill.

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

    Ini memberi tahu TypeScript bahwa tidak masalah menggunakan fungsi dan properti yang diperkenalkan pada ES2019 atau sebelumnya. Dalam praktiknya, ini berarti Anda bisa menggunakan eg String.prototype.trimStartdan Array.prototype.flat.

    Selain ES2019, Node.js 12 juga mendukung BigInt& matchAlldari ES2020, karenanya kami menyertakan definisi tambahan dari ES2020.

Konfigurasi lengkapnya adalah:

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

Jika Anda menargetkan Node.js 12.9.0atau yang lebih baru , Anda cukup menentukan "lib": ["es2020"]karena versi itu mendukung semua fungsi dan properti baru yang diperkenalkan di ES2020. Itu tidak mendukung sintaks JavaScript baru , jadi Anda masih harus tetap aktif "target": "es2019".

Konfigurasi lengkapnya adalah:

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

Jika Anda menjalankan Node.js 14, Anda dapat melihat jawaban saya yang serupa untuk Node.js 14 di sini

Jika Anda menjalankan Node.js 10, Anda dapat melihat jawaban saya yang serupa untuk Node.js 10 di sini

Jika Anda menjalankan Node.js 8, Anda dapat melihat jawaban saya yang serupa untuk Node.js 8 di sini

Linus Unnebäck
sumber
Apakah "target"memengaruhi "lib"dengan cara apa pun jika "lib"dibiarkan kosong di konfigurasi? Jika saya hanya memiliki "target": "es2020"apa "lib"ke default? Ini selalu menjadi sumber misteri bagi saya.
Sumomo
@Sumomo jawaban ini ( stackoverflow.com/a/50987516/148072 ) memberikan sedikit wawasan. Meskipun saya belum menemukan info lebih lanjut tentang apa yang lebih baru dari "ES6" yang menyediakan lib default ...
Linus Unnebäck
1
Ada juga es2020.promise di sana sekarang yang didukung mulai dari Node 12.10.0.
Ivan Yarych
1
@IvanYarych bagian bawah dari jawaban saya memiliki bagian untuk Node.js> = 12.9.0 yang mencakup es2020 yang pada gilirannya termasuk es2020.promise
Linus Unnebäck