TypeScript:当库函数的返回类型未知时该怎么办



我是TypeScript的新手,在调用库函数/方法时不知道该使用什么类型。例如,我在Node.js项目中使用了无头chrome模块。

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

我应该用还是不用打字?

假设您找不到库的打字员,至少我会让函数返回一些承诺,因为您知道它是异步的。

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

在使用unknownany之前,我会尝试查看您库的类型是否存在于npm @ types中,以查看类型信息是否可以位于那里。

看起来木偶师有几种类型:

npm install --save @types/puppeteer

至于你应该做什么,那更取决于你自己。如果假设没有可用的类型,那么你可能会陷入困境。您可以创建自己的打字员文件,并通过Typescript的声明合并功能进行合并。然而,我建议不要这样做,因为

A。每次更新库时,你都必须更新你的打字文件,这是一个痛苦的

B。如果你对库返回的类型没有完全正确,你最终可能会让自己感到困惑

我可能会把它留在unknownany,让事情变得更容易。

编辑:更好的答案是遵循@Frank Modica的答案,并将结果包装在Promise中,如Promise<any>Promise<unknown>。这至少提供了一些智能感知信息,比我之前所说的简单地将其定义为anyunknown要好得多。

最新更新