TypeScript: что делать, если возвращаемый тип библиотечной функции неизвестен - PullRequest
0 голосов
/ 29 октября 2018

Я новичок в TypeScript и не знаю, какой тип использовать при вызове библиотечных функций / методов. Например, я использую модуль безголового хрома в своем проекте Node.js.

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;
}

Должен ли я использовать любой или оставить его без типа?

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Прежде чем использовать unknown или any, я бы попробовал посмотреть, существуют ли типы для вашей библиотеки в npm @ types, чтобы посмотреть, может ли информация о типах там находиться.

Похоже, есть типы для кукловода:

npm install --save @types/puppeteer

Что касается того, что вы должны делать, это зависит от вас. Если гипотетически никакие типы не были доступны, то вы могли бы застрять. Вы можете создать свой собственный файл наборов и объединить его с помощью функции объявления слияния Typescript. Однако я бы посоветовал против этого, потому что

A. Вам придется обновлять ваш файл для печати каждый раз, когда вы обновляете библиотеку, что очень неприятно

B. Вы можете запутаться, если не совсем правы относительно типов, которые возвращает библиотека

Я бы, вероятно, просто оставил его на unknown или any, чтобы все было проще.

Редактировать: лучший ответ - следовать ответу @Frank Modica и обернуть результат в Обещание, например Promise<any> или Promise<unknown>. Это обеспечивает, по крайней мере, некоторую информацию о intellisense и намного лучше, чем просто определить ее как any или unknown, как я уже говорил ранее.

0 голосов
/ 29 октября 2018

Предполагая, что вы не можете найти наборы для своей библиотеки, по крайней мере, я хотел бы, чтобы функция возвращала обещание чего-либо, так как вы знаете, что это асинхронно.

Более новые версии TypeScript представили тип unknown:

async function launchBrowser (): Promise<unknown>

Но вы также можете вернуть обещание any:

async function launchBrowser (): Promise<any>

Ознакомьтесь с документами для нового типа unknown: https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-0.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...