Website-Suche

javascript - TypeScript: Was tun, wenn der Rückgabewert einer Bibliotheksfunktion unbekannt ist


Ich bin neu in TypeScript und weiß nicht, welchen Typ ich verwenden soll, wenn ich Bibliotheksfunktionen/-methoden aufrufe. Zum Beispiel benutze ich das headless Chrome-Modul in meinem Node.js-Projekt.

import puppeteer = require("puppeteer");

async function launchBrowser () {
    const browser = await puppeteer.launch();

    return browser;
}

// In this case I do not know the return type of the launch method. What should I do?

async function launchBrowser (): Promise<any> {
    const browser: any = await puppeteer.launch();

    return browser;
}

Soll ich 'any' verwenden oder es ohne Typ lassen?

Antwort #1

Angenommen, Sie können keine Typdefinitionen für Ihre Bibliothek finden, würde ich zumindest die Funktion ein Promise von etwas zurückgeben lassen, da Sie wissen, dass sie asynchron ist.

Neuere Versionen von TypeScript haben den unknown-Typ eingeführt:

async function launchBrowser (): Promise<unknown>

Aber Sie können auch ein Versprechen von any zurückgeben:

async function launchBrowser (): Promise<any>

Schau dir die Dokumentation für den neuen unknown-Typ an: https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-0.html

Antwort #2

Bevor Sie unknown oder any verwenden, würde ich versuchen zu prüfen, ob die Typen für Ihre Bibliothek in npm @ types existieren, um zu sehen, ob die Typinformationen dort gefunden werden können.

Es sieht so aus, als gäbe es Typen für Puppeteer:

npm install --save @types/puppeteer

Was du tun solltest, liegt mehr bei dir. Wenn hypothetisch keine Typen verfügbar wären, könntest du sozusagen feststecken. Du könntest deine eigene Typdatei erstellen und sie über Typescripts Declaration Merging-Funktion zusammenführen. Ich würde jedoch davon abraten, weil

A. Du müsstest deine Typings-Datei jedes Mal aktualisieren, wenn du die Bibliothek aktualisierst, was lästig ist

B. Du könntest dich wirklich verwirren, wenn du nicht vollkommen richtig über die Typen bist, die die Bibliothek zurückgibt

Ich würde es wahrscheinlich einfach bei unknown oder any belassen, um die Dinge zu erleichtern.

Bearbeiten: Die bessere Antwort ist, @Frank Modicas Antwort zu folgen und das Ergebnis in ein Promise zu verpacken, wie zum Beispiel Promise<any> oder Promise<unknown>. Dies liefert zumindest einige Intellisense-Informationen und ist viel besser, als es einfach als any oder unknown zu definieren, wie ich zuvor angegeben hatte.

Verwandte Artikel