Verwenden von TypeScript in JavaScript ohne Schreiben von TypeScript

Ich bin ein großer Fan von TypeScript. Wann immer möglich, versuche ich, diese Sprache in meinen Projekten zu verwenden. TypeScript bietet dem Entwickler Fehlerberichte und Typprüfungen in JavaScript- und TypeScript-Code. Darüber hinaus kann jeder, der TypeScript schreibt, die praktischen Funktionen zur Code-Vervollständigung nutzen und schnell und zuverlässig Refactoring durchführen. TypeScript ist die erste Verteidigungslinie gegen Codefehler. Eine weitere Stärke dieser Sprache ist, dass Sie beim Schreiben von Programmen die neuesten JavaScript-Funktionen verwenden können. Gleichzeitig wird das, was durch Konvertieren von TypeScript-Code in JavaScript erzielt wird, von allen Browsern unterstützt. Das ist sehr angenehm.



Richtig, nicht alle Front-End-Projekte enthalten TypeScript. Was wäre, wenn Sie die Funktionen von TypeScript nutzen könnten, aber nicht das gesamte Projekt (und das gesamte Team) in das Projekt übersetzen und der Projektassembly-Pipeline ein neues Tool hinzufügen könnten? Dies ist dank VS Code und JSDoc möglich.

Arbeitsumgebung einrichten


▍ Option Nummer 1. VS-Codeeinstellungen (globale Validierung)


Die erste Möglichkeit, TypeScript (TS) in Projekten zu verwenden, die in einfachem JavaScript (JS) geschrieben sind, besteht darin, alle JS-Dateien mit TS zu validieren. Dies erfolgt durch Einfügen eines globalen Parameters VS Code. Dieser Parameter kann in den Benutzer- oder Arbeitsbereichseinstellungen aktiviert werden:

"javascript.implicitProjectConfig.checkJs": true

Wenn Sie zu denjenigen gehören, die die grafische Oberfläche bevorzugen, können Sie sie wie unten gezeigt aktivieren.


Aktivieren der TypeScript JS-Validierung

▍Option Nummer 2. Verwenden der Datei jsconfig.json (globale Validierung)


Eine weitere Option zum Aktivieren der globalen JS-Codeüberprüfung mithilfe von TS ist die Verwendung einer Datei jsconfig.json. Wenn eine solche Datei vorhanden ist, überschreiben die darin angegebenen Einstellungen die in VS Code angegebenen Einstellungen.

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

▍ Option Nummer 3. Aktivieren Sie die Validierung für einzelne Dateien


Eine dritte Möglichkeit, TypeScript zur Steuerung von JS-Code zu verwenden, besteht darin, die Überprüfung auf der Ebene der einzelnen Dateien zu aktivieren. Es besteht darin, den entsprechenden Kommentar am Anfang der Datei hinzuzufügen:

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

Mit derselben Idee können Sie die TS-Überprüfung für eine einzelne JS-Datei deaktivieren. Dies erfolgt, wenn die TS-Prüfung global mit den oben beschriebenen Methoden aktiviert wird. Ein spezieller Kommentar wird auch hier verwendet:

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

Wenn TypeScript nur einen Teil der Datei ignorieren soll, können Sie dies tun:

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

Code-Eingabe mit JSDoc


Wir haben gerade darüber gesprochen, wie die TS-Prüfung auf Dateiebene aktiviert werden kann. Dies bietet grundlegende Funktionen zur Typprüfung. Sie können erweitert werden, indem Typen mithilfe von Kommentaren im JSDoc-Format beschrieben werden.

▍Typisierung von Funktionen


Sie können mit JSDoc Code eingeben und beschreiben, was die Funktionen als Eingabe akzeptieren:

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

Danach kann der Editor Hinweise nach Typ geben.


Hinweis zum

Wertetyp, der von der Funktion akzeptiert wird Diese Methode eignet sich gut für einfache Typen. Was ist jedoch, wenn der Entwickler seine eigenen Typen beschreiben muss? Dies kann mit dem Tag erfolgen@typedef. Ich empfehle, Typbeschreibungen am Anfang der Datei einzufügen. Dies erleichtert das Erkennen solcher Beschreibungen im Laufe der Arbeit:

/**
* @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
*/

Solche Beschreibungen können bei Bedarf verwendet werden:

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

Ein weiterer Anwendungsfall für diese Technik besteht darin, Typdeklarationen in spezielle Dateien zu verschieben. Angenommen, eine solche Datei kann aufgerufen werden 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;
}

Diese Typen können dann in JavaScript verwendet werden:

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

▍Typisierung von regulärem Code


Die obigen Beispiele lösen das Problem der Eingabe der Eingabe- und Ausgabewerte von Funktionen. Ähnliches kann mit den integrierten JSDoc-Kommentaren erreicht werden.


Eingabe einer regulären Variablen

▍Typisierung von Bibliotheken


VS Code verfügt über ein System zum automatischen Abrufen von Typen für Bibliotheken von Drittanbietern. Das entsprechende Verfahren gilt für alle in der Datei beschriebenen Pakete package.json. Wenn jemand dies jedoch explizit festlegen möchte, kann er die entsprechenden Einstellungen vornehmen in jsconfig.json:

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

Nachdem das Typabrufsystem die Bibliothek verarbeitet hat, können die Typen in JSDoc verwendet werden:

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

Wechseln zu TypeScript


Wenn Sie sich entscheiden, ein Typoskript JavaScript Projekt zu konvertieren, in einigen Teilen , von denen Typoskript verwendet wird, können Sie einfach benennen Sie sie jsconfig.jsonzu tsconfig.jsonund schließen die Parameter darin allowJs:

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

Danach können Sie die *.js-files in *.ts-files umbenennen und den Code dieser Dateien eingeben. Der Prozess der Übersetzung eines Projekts in TypeScript kann schrittweise erfolgen.

Zusammenfassung


Nach dem Lesen dieses Materials werden Sie möglicherweise feststellen, wie einfach es ist, TypeScript-Funktionen in einem JavaScript-Projekt zu nutzen. Konfigurieren Sie dazu einfach den VS-Code entsprechend. Mit dem hier beschriebenen Ansatz können Sie keine Änderungen am Projektassemblierungsprozess vornehmen, kein Risiko eingehen, diesen Prozess zu verletzen, und das Entwicklungsteam nicht zwingen, dringend auf eine neue Sprache umzusteigen.

Wenn entschieden wird, dass das JS-Projekt, das nur einige der TypeScript-Funktionen verwendet, vollständig auf TS übertragen wird, ist dies ebenfalls einfach. Darüber hinaus kann ein solcher Übergang schrittweise durchgeführt werden.

Hier ist das GitHub-Repository, in dem Sie die in diesem Artikel verwendeten Codebeispiele finden.

Liebe Leser! Wie beurteilen Sie die Idee der Typprüfung in JS-Code mithilfe von TypeScript-Funktionen?


All Articles