Microsoft telah merilis beta pertama TypeScript 4.5. Rilis ini membuat penyesuaian untuk interaksi dengan modul ECMAScript di Node.js. Selain itu, ini menghilangkan panggilan fungsi akhir rekursif dalam kasus tertentu dan mengambil dua inovasi yang disediakan dalam standar ECMAScript.
Modul yang lebih fleksibel
Selain CommonJS Modules System (CJS) yang digunakan secara tradisional, Node.js sekarang juga dapat memproses ECMAScript Modules (ESM). Untuk interaksi, TypeScript 4.5 memimpin di bawah compilerOptions
NS module
-Pengaturan node12
dan nodenext
A.
Mode modul baru memeriksa apakah ada .ts-., .Tsx-., .Js-. atau file .jsx adalah modul ES. Dalam hal ini, sistem memproses impor modul lain sesuai dengan pedoman ESM. Antara lain, jalur impor relatif harus berisi ekstensi nama file. Misalnya, spesifikasi import "./foo.js"
saat saya di CJS import "./foo")
tak berujung diperbolehkan.
Jenis modul terutama ditemukan di Node.js di satu sisi di package.json melalui entri "type": "module"
Di mana "type": "commonjs"
Deklarasikan sebagai modul ESM atau CJS. Selain itu, Node.js memungkinkan definisi eksplisit ekstensi file melalui .mjs untuk EMS dan .cjs untuk CJS. Demikian pula, TypeScript 4.5 memperkenalkan ekstensi .mts dan .cts.
Tidak ada rekursi tanpa akhir
Dua perubahan terkait dengan pengoptimalan TypeScript di bawah tenda. Dengan cara ini sistem mencoba mengenali apakah rekursi berpotensi berjalan tanpa batas waktu atau jika ekspansi tipe akan memakan waktu lama. Beberapa jenis dapat salah memicu penggunaan TypeScript heuristik untuk deteksi. Sebagai contoh, entri blog mencantumkan cuplikan kode yang menghilangkan spasi awal dari jenis tipe string:
type TrimLeft<T extends string> =
T extends ` ${infer Rest}` ? TrimLeft<Rest> : T;
// Test = "hello" | "world"
type Test = TrimLeft<" hello" | " world">;
Implementasi berfungsi untuk kode sampel. Namun, jika string memiliki banyak ruang di awal, deteksi heuristik mengarah ke pesan kesalahan
error: Type instantiation is excessively deep
and possibly infinite.
Dalam aplikasi tertentu, bagaimanapun, overhead kurang penting, karena fungsinya adalah rekursif akhir di cabang dan mengembalikan hasilnya secara langsung tanpa pemrosesan lebih lanjut. TypeScript 4.5 baru-baru ini menghapus panggilan fungsi terminal ketika cabang dari tipe bersyarat kembali menjadi tipe bersyarat. Dengan cara ini, tidak diperlukan instantiasi tambahan, yang berpotensi mengarah pada persyaratan memori tak terbatas dari fungsi rekursif.
Tolong jangan bersihkan!
TypeScript 4.5 juga memperkenalkan parameter baru --preserveValueImports
yang mencegah penghapusan otomatis impor yang tampaknya tidak digunakan. Sebagai contoh, posting blog menggunakan potongan kode eval
untuk memulihkan:
import { Animal } from "./animal.js";
eval("console.log(new Animal().isDangerous())");
Bahkan jika menggunakan eval
di TypeScript dan JavaScript dipertanyakan karena alasan keamanan, contoh tersebut menggambarkan kasus di mana TypeScript mungkin secara keliru menganggap impor tidak perlu dan menghapusnya karena modul JavaScript digunakan dalam string. Hal yang sama berlaku untuk berinteraksi dengan kerangka kerja seperti Vue.js atau Svelte. Di sana, beberapa impor tidak langsung dikenali sebagai digunakan untuk sistem bangunan karena di script
-Bagian-bagian yang terlibat.
Bidang pribadi dan format impor
Dengan dua inovasi, TypeScript mengambil saran ECMAScript yang belum ada dalam standar, tetapi direncanakan. Di satu sisi, TypeScript dapat memeriksa apakah suatu objek berisi bidang pribadi yang ditentukan di kelas saat ini:
class Person {
#name: string;
constructor(name: string) {
this.#name = name;
}
equals(other: unknown) {
return other &&
typeof other === "object" &&
#name in other && // <- this is new!
this.#name === other.#name;
}
}
Ini proposal ECMA terkait berjudul “Kontrol merek ergonomis untuk bidang pribadi” (secara kasar dapat diterjemahkan sebagai “Kontrol merek ergonomis untuk bidang pribadi”). Bidang pribadi dapat digunakan untuk memeriksa apakah itu memang turunan dari kelas, karena hanya ada dalam kasus ini.
Selain itu, Juga dimaksudkan agar ECMAScript dapat digunakan Impor pernyataan gunakan dalam TypeScript 4.5. Mereka memastikan bahwa file yang diimpor dalam format tertentu.
import obj from "./something.json" assert { type: "json" };
Namun, sistem pembangunan tidak mendukung verifikasi format konten yang sebenarnya, karena tanggung jawab untuk ini terletak pada browser atau waktu proses.
Inovasi lain dalam TypeScript 4.5 dapat ditemukan dari Blog Pengembangan Microsoft. Fase beta TypeScript 4.5 dijadwalkan selama enam minggu, dan versi finalnya diharapkan sesuai dengan peta jalan akan dirilis pada 16 November 2021.
(rm)
“Organizer. Devoted music enthusiast. Pop culture pioneer. Coffee practitioner.”