Menu

Komentar TypeScript: JSDoc, @ts-ignore, dan @ts-expect-error

TypeScript memakai komentar // dan /* */ dari JavaScript, ditambah komentar JSDoc /** */ yang ditampilkan editor saat kursor diarahkan. TypeScript juga membaca beberapa komentar khusus: @ts-expect-error, @ts-ignore, @ts-nocheck, @ts-check, dan direktif /// <reference>.

Halaman ini dilengkapi editor yang bisa dijalankan. Edit, jalankan, dan lihat output-nya seketika.

Komentar TypeScript adalah komentar JavaScript: // untuk sisa baris dan /* */ untuk blok. Komentar blok yang diawali /** adalah komentar dokumentasi (JSDoc), yang ditampilkan editor saat kursor diarahkan ke hal yang didokumentasikannya. Selain itu, TypeScript membaca beberapa komentar khusus yang mengubah cara compiler memeriksa kodemu.

Output:

212

Komentar tidak memengaruhi program. Komentar juga tidak memengaruhi pemeriksaan tipe, kecuali komentar direktif yang dibahas di bawah.

Komentar Satu Baris dan Komentar Blok

Komentar // mengubah semua yang ada setelahnya di baris itu menjadi komentar, yang juga merupakan cara cepat untuk menonaktifkan sebaris kode. /* */ bisa berada di tengah baris atau mencakup banyak baris.

Komentar blok tidak bisa bersarang. */ pertama mengakhiri komentar, jadi membungkus kode yang sudah berisi komentar blok akan merusaknya:

/* outer comment /* inner comment */ this text is now code */

Compiler lalu mencoba membaca this text is now code */ sebagai kode dan melaporkan error sintaks. Untuk mengomentari bagian yang berisi komentar blok, pakai // di setiap baris; sebagian besar editor melakukannya dengan Ctrl+/ (Cmd+/ di macOS).

Komentar Dokumentasi JSDoc

Komentar /** ... */ tepat sebelum fungsi, class, method, property, interface, atau variabel mendokumentasikannya. Editor menampilkan teksnya di tooltip saat kursor diarahkan dan di autocomplete, dan generator dokumentasi seperti TypeDoc mengubahnya menjadi halaman referensi. TSDoc, standar untuk komentar semacam ini di kode TypeScript yang dimulai oleh Microsoft, memakai sintaks yang sama untuk tag-tag yang umum:

TagArti
@param name descriptionMendeskripsikan parameter
@returns descriptionMendeskripsikan nilai kembalian
@throws descriptionMendeskripsikan error yang bisa dilempar fungsi
@exampleMemulai blok contoh, biasanya diikuti blok kode
@deprecated reasonMenandai API sebagai usang; editor menampilkannya dicoret
@see atau {@link Name}Menunjuk ke kode terkait
@remarksPenjelasan yang lebih panjang setelah baris ringkasan

Di file .ts, jangan mengulang tipe di JSDoc. Anotasi di kode itulah tipenya, dan tag tipe JSDoc diabaikan di sana: /** @type {string} */ const v: number = 5; lolos kompilasi tanpa keluhan karena hanya : number yang dihitung.

Di editor, mengarahkan kursor ke transfer atau balance di mana pun dalam proyek akan menampilkan deskripsi ini.

Menandai Kode sebagai Usang

@deprecated tidak menyebabkan error kompilasi. Tag ini menyuruh editor menampilkan setiap pemakaian fungsi yang usang dengan coretan dan alasannya saat kursor diarahkan, cara halus untuk mengarahkan pemanggil ke penggantinya:

Output:

$19.99
19.99 EUR

@ts-expect-error dan @ts-ignore

Kedua komentar ini membungkam error tipe di baris berikutnya. Kadang itu memang pilihan yang tepat: tes yang memeriksa bagaimana sebuah fungsi menangani input yang salah saat runtime, atau celah yang sudah diketahui di tipe sebuah library.

Output:

runtime error: text.toUpperCase is not a function

Tanpa komentar itu, shout(42) adalah error kompilasi (TS2345). Dengan komentar itu, file bisa dikompilasi dan panggilannya sampai ke runtime, yang memang menjadi inti tes ini.

Perbedaan kedua direktif ini terlihat saat error-nya hilang. @ts-expect-error mewajibkan adanya error untuk dibungkam, jadi komentar yang sudah basi menjadi error itu sendiri:

index.ts(6,1): error TS2578: Unused '@ts-expect-error' directive.

// @ts-ignore di tempat yang sama tetap diam, baik selama error-nya ada maupun setelah hilang. Itulah sebabnya @ts-expect-error adalah default yang lebih baik: saat seseorang memperbaiki tipenya, compiler memberitahumu bahwa penekanan error itu bisa dihapus. Selalu tambahkan alasan setelah direktifnya, seperti contoh di atas, supaya pembaca berikutnya tahu kenapa komentar itu ada.

Keduanya hanya mencakup baris berikutnya dan semua error di baris itu. Untuk jalan pintas pada keseluruhan nilai, as unknown as T yang eksplisit atau pemeriksaan runtime biasanya lebih jelas daripada komentar pembungkam.

@ts-nocheck dan @ts-check

// @ts-nocheck di bagian atas file mematikan pemeriksaan tipe untuk seluruh file itu. Komentar ini harus berada paling depan, sebelum kode apa pun: kalau ditaruh lebih ke bawah, ia diabaikan dan error-nya tetap muncul.

// @ts-nocheck
const n: number = "not a number"; // no error reported

Ini berguna saat memigrasikan codebase JavaScript yang besar, dan pertanda masalah di tempat lain.

// @ts-check melakukan kebalikannya di file JavaScript: ia menyalakan pemeriksaan tipe untuk file .js itu, memakai inferensi dan tipe JSDoc, bahkan ketika checkJs dimatikan di tsconfig.json (file itu tetap harus menjadi bagian dari proyek, lewat allowJs):

// @ts-check

/**
 * @param {number} cents
 * @returns {string}
 */
function formatCents(cents) {
    return (cents / 100).toFixed(2);
}

formatCents("12"); // error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'.

Di file JavaScript, tag JSDoc adalah tipenya, dan begitulah banyak proyek mendapatkan pemeriksaan tipe tanpa mengubah file menjadi .ts.

Direktif Triple-Slash

Komentar berbentuk /// <reference ... /> di bagian paling atas file adalah direktif compiler:

/// <reference types="node" />
/// <reference lib="es2023.array" />
/// <reference path="./globals.d.ts" />
  • types="node" menambahkan package @types ke program, seperti mencantumkannya di "types" pada tsconfig.json.
  • lib="..." menambahkan library bawaan ke program, seperti opsi lib.
  • path="..." menyertakan file lain, kebanyakan dipakai di dalam file .d.ts.

Di kode aplikasi, pernyataan import dan pengaturan tsconfig.json menggantikan hampir semua pemakaiannya; kamu biasanya menemukan direktif ini di file deklarasi dan kode yang dihasilkan otomatis seperti vite-env.d.ts milik Vite. Sebagai demonstrasi singkat, lib membuat method array yang lebih baru tersedia di file ini:

Komentar di Output Hasil Kompilasi

tsc mempertahankan komentar di JavaScript yang ditulisnya. Atur "removeComments": true untuk membuangnya; komentar yang diawali /*! tetap bertahan bahkan saat itu, sesuai konvensi untuk header lisensi:

/*! MyLib v1.2.0 | MIT License */

Komentar JSDoc juga disalin ke file .d.ts saat declaration menyala, sehingga pengguna sebuah library melihat deskripsinya di editor mereka.

Pertanyaan yang sering diajukan

Bagaimana cara menulis komentar di TypeScript?

Sama seperti di JavaScript: // memulai komentar sampai akhir baris, dan /* ... */ membungkus komentar yang bisa terdiri dari beberapa baris. Komentar blok yang diawali /** adalah komentar dokumentasi (JSDoc), yang ditampilkan editor saat kursor diarahkan ke fungsi, class, atau property yang didokumentasikan.

Apa bedanya @ts-ignore dan @ts-expect-error?

Keduanya membungkam error tipe di baris berikutnya. // @ts-expect-error juga memeriksa bahwa di sana memang ada error: kalau baris itu tidak lagi punya error, compiler melaporkan error TS2578: Unused '@ts-expect-error' directive., sehingga penekanan error yang sudah basi ketahuan. // @ts-ignore tetap diam selamanya. Pilih @ts-expect-error.

Bagaimana cara mengabaikan error TypeScript di seluruh file?

Taruh // @ts-nocheck di bagian paling atas file, sebelum kode apa pun. Compiler lalu tidak melaporkan error tipe untuk file itu (error sintaks tetap muncul). Ini alat untuk migrasi; untuk satu baris, pakai // @ts-expect-error.

Apakah komentar ikut masuk ke JavaScript hasil kompilasi?

Ya, secara default tsc mempertahankan komentar di output. Dengan "removeComments": true, komentar dibuang, kecuali komentar yang diawali /*!, yang dipertahankan untuk header lisensi. Bundler dan minifier biasanya membuangnya di build produksi.

Apakah sebaiknya aku menulis tipe di komentar JSDoc pada file .ts?

Tidak. Di file .ts, tag tipe JSDoc seperti @type {string} atau @param {number} x diabaikan dalam pemeriksaan tipe; anotasi di kode itulah tipenya. Pakai JSDoc di file .ts untuk deskripsi, dan tipe JSDoc hanya di file .js yang diperiksa dengan // @ts-check atau checkJs.

Ilustrasi bahasa pemrograman di Coddy

Belajar coding dengan Coddy

Mulai