3 poin oleh GN⁺ 2024-07-26 | 1 komentar | Bagikan ke WhatsApp

Modul: penambahan --experimental-strip-types

  • Bisa menjalankan file TypeScript di Node.js

    • Dengan mengatur flag --experimental-strip-types, file TypeScript dapat dijalankan
    • Node.js mengubah kode sumber TypeScript menjadi kode sumber JavaScript
    • Pada proses konversi, pemeriksaan tipe tidak dilakukan dan tipe dihapus
  • Latar belakang

    • Penting untuk memungkinkan file TypeScript dijalankan tanpa dependensi eksternal atau loader
    • Pengguna diharapkan bisa menjalankan node foo.ts
  • Arti type stripping

    • Type stripping berarti menghapus semua tipe dan mengubah input menjadi modul JavaScript
    • Contoh: const foo: string = "foo"; diubah menjadi const foo = "foo";
  • Alasan memilih @swc/wasm-typescript

    • Karena lebih sederhana
    • Alat lain perlu menambahkan Rust atau Go, tetapi @swc/wasm-typescript hanya memerlukan paket kecil serta file wasm dan js
    • Juga digunakan di Deno sehingga dapat dipercaya
  • Keterbatasan

    • Fitur khusus TypeScript seperti enum dan namespace tidak dikonversi
    • Import tanpa ekstensi tidak didukung
  • Rencana ke depan

    • Ada kemungkinan diimplementasikan pada lapisan native
    • Dukungan source map dapat ditambahkan

Ringkasan GN⁺

  • Menjelaskan fitur baru yang memungkinkan file TypeScript dijalankan di Node.js
  • File TypeScript dapat dijalankan setelah dikonversi menjadi JavaScript, tanpa pemeriksaan tipe
  • Ini menyederhanakan lingkungan pengembangan karena pengguna dapat menjalankan file TypeScript tanpa dependensi eksternal
  • Fitur ini diimplementasikan menggunakan @swc/wasm-typescript, dan implementasi di lapisan native juga sedang dipertimbangkan untuk masa mendatang
  • Dapat berguna untuk proyek yang menggunakan TypeScript dan JavaScript secara campuran.

1 komentar

 
GN⁺ 2024-07-26
Komentar Hacker News
  • Menghapus tipe TypeScript tidak mungkin dilakukan tanpa sintaks TypeScript. Penghapusan tipe bukan pekerjaan di level token, dan sintaks TypeScript terus berubah

    • Sebagai contoh, foo < bar & baz > ( x ) ditafsirkan secara berbeda di TypeScript 1.5
    • Untuk menggunakan fitur TypeScript baru, perlu dikompilasi ke JS atau menjaga versi Node tetap terbaru
    • Bagi mereka yang menggunakan rilis Node LTS, ini bisa menjadi kompromi yang sulit
  • Jika Node.js bisa menjalankan file TypeScript secara langsung, kompiler TypeScript tidak perlu menghapus tipe dan mengubahnya menjadi JavaScript

    • Ini mirip dengan situasi di Python
    • Di Python, ada beberapa type checker, dan semuanya memakai sintaks type hint yang sama tetapi menerapkan makna yang berbeda
    • Di JavaScript, TypeScript menjadi satu-satunya type checker populer
    • Di Python, ada juga orang yang memakai type hint seperti komentar
    • Jika Node.js mendukung fitur untuk mengabaikan tipe, hal serupa juga akan dimungkinkan di JavaScript
  • Penasaran bagaimana ekosistem NPM akan bereaksi jika fitur ini menjadi default

    • Saat menerbitkan modul NPM, apakah orang akan tetap membangun versi CJS dan EJS, atau menambahkan engine: nodejs >= 25 ke package.json dan melewati tahap build
    • Secara pribadi, saya berharap modul NPM yang ditulis dengan TS tidak lagi menyediakan dist/.cjs
    • Melewati tahap build akan sangat menggoda bagi para kontributor NPM
    • Ini bisa menimbulkan efek berantai di ekosistem NPM
    • Jika Node.js menyediakan fitur ini tanpa flag eksperimental, semua konsumen kemungkinan akan menerima file TS
    • Ini juga bisa memaksa Firefox dan Safari untuk menerima file TS
    • Secara pribadi, saya menyambut baik kompiler JS yang membuang anotasi tipe TS
    • Jika Node menerima file .ts, tahap transkompilasi bisa dihapus
  • Akan sangat menguntungkan jika Node bisa menginspeksi tipe di JS

    • Di Python ada alat seperti pydantic, yang menginspeksi tipe dan menghasilkan validasi
    • Ini memungkinkan pemeriksaan tipe, validasi data saat runtime, pembuatan API, dan pembuatan dokumentasi API dengan satu notasi standar
    • Saat ini di JS, alat seperti zod masih diperlukan
  • Developer experience (DX) Bun di area ini belum pernah tertandingi, dan sudah memenuhi sebagian besar use case

    • Di Node, tidak ada cara untuk mengatur agar ekstensi tidak diwajibkan saat import, dan tsc juga tidak bisa diatur agar otomatis menambahkan ekstensi .js
    • Dukungan TypeScript native mungkin bisa menyelesaikan ini, tetapi akan sulit menyamai pengalaman pengguna atau performa Bun
  • Saya sangat menikmati TypeScript dan sudah lama mendambakan runtime TypeScript

    • Alasan saya meninggalkan Java adalah karena saya menginginkan sistem tipe yang lebih kaya fitur dan pengetikan bertahap
    • Terlepas dari kekurangan ekosistem npm, memakai library terasa lebih ringan dan lebih menyenangkan
    • Rust ada di spektrum bahasa yang berbeda, tetapi memberikan kesan yang mirip
    • JIT adalah istilah yang keliru; yang ingin saya maksud adalah perbedaan waktu startup dan runtime antara JVM dan V8
  • Fitur deno favorit saya akhirnya masuk langsung ke Node

    • Saya sangat antusias karena kini bisa menghapus tipe tanpa memasang esbuild
    • Belakangan ini saya lebih memilih Python, tetapi TypeScript lebih baik daripada Python dalam hal tipe
    • Skrip yang besar memberi manfaat lebih besar ketika memiliki tipe
  • Ini adalah sebulan yang sangat penting bagi Node

    • Di v22.5.0 ditambahkan node:sqlite, dan sekarang dukungan TypeScript juga diperkenalkan
    • Saya suka arah perkembangan Node
  • Saya penulis PR-nya, AMA

  • Sudah lama saya mulai memakai Node.js untuk pekerjaan backend, dan itu memberi banyak keunggulan dibanding PHP

    • Node agak merepotkan dan harus dirakit agar menjadi bahasa yang saya inginkan
    • Saya lalu mulai memakai Golang, dan berkat type safety, menulis kode jadi lebih mudah
    • TypeScript adalah opsi yang bagus, tetapi tetap hanya fitur tambahan lain
    • Keunggulan besar memakai Node adalah kecepatan membuat prototipe, dan keuntungan itu bisa terimbangi jika memakai TypeScript