Menggunakan TypeScript dalam JavaScript tanpa menulis TypeScript

Saya penggemar berat TypeScript. Bilamana memungkinkan, saya mencoba menggunakan bahasa ini dalam proyek saya. TypeScript menyediakan pengembang dengan laporan kesalahan dan mengetik memeriksa dalam JavaScript dan kode TypeScript. Selain itu, siapa pun yang menulis TypeScript dapat menggunakan fitur yang mudah digunakan untuk penyelesaian kode, dapat dengan cepat dan andal melakukan refactoring. TypeScript adalah garis pertahanan pertama terhadap kesalahan dalam kode. Poin kuat lain dari bahasa ini adalah bahasa ini memungkinkan Anda untuk menggunakan fitur JavaScript terbaru saat menulis program. Pada saat yang sama, apa yang diperoleh dengan mengonversi kode TypeScript ke JavaScript akan didukung oleh semua browser. Itu sangat bagus.



Benar, tidak semua proyek front-end menyertakan TypeScript. Bagaimana jika Anda bisa menggunakan kemampuan TypeScript, tetapi jangan menerjemahkan seluruh proyek (dan seluruh tim) ke dalamnya dan menambahkan alat baru ke pipa rakitan proyek? Ini dimungkinkan berkat VS Code dan JSDoc.

Menyiapkan lingkungan kerja


▍ Opsi nomor 1. Pengaturan Kode VS (Validasi Global)


Cara pertama untuk menggunakan TypeScript (TS) dalam proyek yang ditulis dalam JavaScript biasa (JS) adalah dengan menggunakan TS untuk memvalidasi semua file JS. Ini dilakukan dengan memasukkan satu parameter global VS Code. Parameter ini dapat diaktifkan di pengaturan pengguna atau ruang kerja:

"javascript.implicitProjectConfig.checkJs": true

Jika Anda salah satu dari mereka yang lebih suka menggunakan antarmuka grafis, maka Anda dapat mengaktifkannya seperti yang ditunjukkan di bawah ini.


Mengaktifkan Validasi TypeScript JS

▍Pilihan nomor 2. Menggunakan File jsconfig.json (Validasi Global)


Pilihan lain untuk mengaktifkan validasi kode JS global menggunakan TS adalah menggunakan file jsconfig.json. Jika ada file seperti itu, pengaturan yang ditentukan di dalamnya akan menimpa pengaturan yang ditentukan dalam VS Code.

{
  "compilerOptions": {
    "checkJs": true
  }
}

▍ Opsi nomor 3. Aktifkan validasi untuk file individual


Cara ketiga untuk menggunakan TypeScript untuk mengontrol kode JS adalah mengaktifkan verifikasi pada tingkat file individual. Ini terdiri dari menambahkan komentar yang sesuai ke awal file:

// @ts-check
let itsAsEasyAs = 'abc';
itsAsEasyAs = 123; // Error: Type '123' is not assignable to type 'string'

Menggunakan ide yang sama, Anda dapat mematikan TS memeriksa satu file JS. Ini dilakukan jika pemeriksaan TS diaktifkan secara global menggunakan metode yang dijelaskan di atas. Komentar khusus juga digunakan di sini:

// @ts-nocheck
let easy = 'abc';
easy = 123; //  

Dan jika Anda ingin TypeScript mengabaikan hanya sebagian file, Anda dapat melakukan ini:

let easy = 'abc';
// @ts-ignore
easy = 123; //  

Pengetikan kode menggunakan JSDoc


Kami baru saja berbicara tentang cara mengaktifkan pemeriksaan tingkat file TS. Ini memberikan kemampuan pengecekan tipe dasar. Mereka dapat diperpanjang dengan menjelaskan jenis menggunakan komentar format JSDoc.

YpPengaturan fungsi


Anda dapat mulai mengetik kode menggunakan JSDoc dengan deskripsi tentang apa yang diterima fungsi sebagai input:

/**
 * @param {number} shippingVal
 */
updateShipping(shippingVal) {
    ...
}

Setelah itu, editor akan dapat memberikan petunjuk berdasarkan jenis.


Petunjuk tentang jenis nilai yang diterima oleh fungsi

Metode ini sangat cocok untuk tipe sederhana, tetapi bagaimana jika pengembang perlu menggambarkan tipenya sendiri? Ini bisa dilakukan menggunakan tag@typedef. Saya merekomendasikan menempatkan deskripsi jenis di awal file. Ini akan memudahkan pendeteksian deskripsi semacam itu selama bekerja:

/**
* @typedef {Object} CreditNoteTaxResponseViewModel
* @property {number} feeAmount
* @property {number} inclGst
* @property {number} subTotal
* @property {number} total
*
* @typedef {Object} ApiResponse
* @property {string} status
* @property {string} message
* @property {CreditNoteTaxResponseViewModel} response
*/

Deskripsi seperti itu dapat digunakan jika perlu:

/**
                * @param {CreditNoteTaxRequestViewModel} req
                * @returns {Promise<ApiResponse>}
                */
                createCreditNoteTaxApiCall(req) {
        ...
                }

Kasus penggunaan lain untuk teknik ini adalah untuk memindahkan deklarasi tipe ke file khusus. Katakanlah file seperti itu bisa dipanggil main.d.ts.

export interface ICreditNoteTaxRequestViewModel{
    orderID: number;
    shippingCredit: number;
    lines: IICreditNoteTaxLineViewModel[]
}

export interface ICreditNoteTaxLineViewModel{
    originalOrderLineID:number;
    creditQuantity: number;
}

export interface ICreditNoteTaxResponseViewModel{
    feeAmount: number;
    inclGst: number;
    subTotal: number;
    total: number;
}

export interface IApiResponse{
    status: string;
    status: message;
    response: ICreditNoteTaxResponseViewModel;
}

Jenis-jenis ini kemudian dapat digunakan dalam JavaScript:

/**
   * @param {import("./main").ICreditNoteTaxRequestViewModel} req
   * @returns {Promise<import("./main").IApiResponse>}
   */
  function createCreditNoteTaxApiCall(req) {
    ///  
    return;
  }

YpPengaturan kode reguler


Contoh di atas memecahkan masalah mengetik nilai input dan output fungsi. Hal serupa dapat dilakukan dengan menggunakan komentar JSDoc bawaan.


Mengetik variabel reguler

YpKarakterisasi perpustakaan


VS Code memiliki sistem untuk secara otomatis mendapatkan jenis untuk perpustakaan pihak ketiga. Prosedur yang sesuai berlaku untuk semua paket yang dijelaskan dalam file package.json. Tetapi, jika seseorang lebih suka untuk mengatur ini secara eksplisit, ia dapat membuat pengaturan yang sesuai di jsconfig.json:

{
  "typeAcquisition": {
    "include": ["jquery"]
  }
}

Setelah tipe memperoleh sistem proses perpustakaan, tipe dapat digunakan di JSDoc:

/**
 * @param {JQuery<HTMLElement>} $itemRow
 */
initRow($itemRow) {
    ...
}

Beralih ke TypeScript


Jika Anda memutuskan untuk mengkonversi ke sebuah proyek naskah JavaScript, di beberapa bagian yang naskah digunakan, Anda hanya dapat mengubah nama itu jsconfig.jsonuntuk tsconfig.jsondan termasuk parameter di dalamnya allowJs:

{
  "compilerOptions": {
    "allowJs": true,
    "checkJs": true
  }
}

Setelah itu, Anda dapat mulai mengganti nama *.jsfile -file menjadi *.ts-file dan mengetik kode file-file ini. Proses menerjemahkan proyek ke dalam TypeScript dapat terjadi secara bertahap.

Ringkasan


Setelah membaca materi ini, Anda mungkin memperhatikan betapa mudahnya memanfaatkan fitur TypeScript dalam proyek JavaScript. Untuk melakukan ini, cukup konfigurasikan Kode VS sesuai. Pendekatan yang dijelaskan di sini memungkinkan Anda untuk tidak membuat perubahan apa pun pada proses perakitan proyek, tidak mengambil risiko melanggar proses ini, dan tidak memaksa tim pengembangan untuk segera beralih ke bahasa baru.

Jika proyek JS, yang hanya menggunakan beberapa fitur TypeScript, diputuskan untuk sepenuhnya ditransfer ke TS, ini juga mudah dilakukan. Terlebih lagi, transisi semacam itu dapat dilakukan secara bertahap.

Berikut ini adalah gudang GitHub tempat Anda dapat menemukan contoh kode yang digunakan dalam artikel ini.

Pembaca yang budiman! Bagaimana perasaan Anda tentang gagasan pengecekan tipe dalam kode JS menggunakan fitur TypeScript?


All Articles