Tymczasowe sprawdzanie typów w kodzie JavaScript dzięki Visual Studio Code oraz TypeScript

Programistyczny edytor Visual Studio Code, jest napisany w TypeScript, co więcej każda nowa wersja Visual Studio Code przychodzi razem z nową wersją kompilatora TypeScript. Tak się składa, że oba produkty Microsoftu są ze sobą dobrze powiązane.

Ostania aktualizacja Visual Studio Code w wersji 1.12 (kwiecień 2017), przychodzi z kompilatorem TypeScript 2.3. Ta wersja otrzymała możliwość sprawdzania typów w kodzie JavaScript poprzez przełącznik --checkJs.

Możesz sprawdzić poprawność typów w kodzie JavaScript tymczasowo. Jeżeli dodasz na początku pliku .js komentarz // @ts-check, wtedy kompilator TypeScript przejdzie po typach i podkreśli na czerwono błędy.

Przykład

let easy = 'abc';
easy = 123 // Błąd: typ wyrażenia '123` nie można przypisać do typu 'string`.

Dzięki // @ts-check możesz testować sprawdzanie typów na kilku plikach zanim przeniesiesz cały kod na TypeScript. No i oczywiście // @ts-check może posłuszyć jako narzędzie do sprawdzania błędów w kodzie.

Kompilator TypeScript jest na tyle mądry, że korzysta z informacji zawartych w JSDoc.

/**
 * Adds two numbers and returns sum of them
 * 
 * @param {number} a 
 * @param {number} b 
 * @returns sum of a and b
 */
function add(a, b) {
    return a + b;
}


add('1', 2); //Bład: typ wyrażenia '1' w pierwszym argumencie nie można przypisać do typu 'number`.

Ustawienia globalne

Jeżeli ta funkcjonalność podoba się tobie tak bardzo, że chciałbyś ją użyć na wszystkich plikach, które masz repozytorium kodu. Można ustawić "javascript.implicitProjectConfig.checkJs": true w ustawieniach workspace (czyli otwarty katalog) lub w ustawieniach użytkownika. Przypomnę, że ustawienia workspace lub użytkownika znajdziesz przez File->Preferences->Settings lub poprzez skrót klawiaturowy Ctrl+,.

Ustawienia jsconfig.json; tsconfig.json

Włączenie sprawdzania typów w kodzie JavaScript może się odbyć poprzez modyfikację pliku jsconfig.json, aby zawierał takie wpisy:

{
    "compilerOptions": {
        "checkJs": true
    },
    "exclude": [
        "node_modules"
    ]
}

lub tsconfig.json.

{
    "compilerOptions": {
        "allowJs": true,
        "checkJs": true
    },
    "exclude": [
        "node_modules"
    ]
}

Wyłączenie sprawdzania

W przypadku, gdy sprawdzamy wszystkie pliki w projekcie, możemy zachcieć, aby nie które z nich były wyłączone z kontroli typów. Możemy to zrobić poprzez wstawienie na początku pliku komentarza // @ts-nocheck.

lub możemy włączyć sprawdzanie typów na jedną linijkę tak:

let easy = 'abc'
// @ts-ignore
easy = 123 // brak błędu

Pamiętaj o poprawniej wersji

Aby korzystać z tej funkcjonalności potrzebujesz TypeScript w wersji 2.3 lub wyższej. Możesz sprawdzić z jakiej wersji TypeScript korzystasz poprzez Command Palette, skrót klawiaturowy to <Ctrl>+<Shift>+P i wpisanie TypeScript: Select TypeScript Version.

Podsumowanie

Co zostało poruszone w poście:

  • Możliwość włączenia sprawdzania typów w kodzie w JavaScript poprzez komentarz // @ts-check
  • Deklarowanie typów poprzez wykorzystanie komentarzy JSDoc
  • Została opisana możliwość włączenia sprawdzania typów na wielu plikach poprzez globalne i projektowe ustawienia
  • Co trzeba zrobić, aby sprawdzenie typów nie dotyczyło niektórych plików lub niektórych linijek tekstu.
  • Jak sprawdzić aktualnie używaną wersję TypeScript w Visual Studio Code?