Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在承诺中使用.finally()时如何使TypeScript出错_Typescript - Fatal编程技术网

在承诺中使用.finally()时如何使TypeScript出错

在承诺中使用.finally()时如何使TypeScript出错,typescript,Typescript,我在节点8上使用Google云函数,它不支持.finally(),有时我会忘记并使用.finally()部署代码 tsconfig.json { "compilerOptions": { "module": "commonjs", "noImplicitReturns": true, "outDir": "lib", "sourceMap": true, "target": "es2017" }, "compileOnSave": true,

我在节点8上使用Google云函数,它不支持.finally(),有时我会忘记并使用.finally()部署代码

tsconfig.json

{
  "compilerOptions": {
    "module": "commonjs",
    "noImplicitReturns": true,
    "outDir": "lib",
    "sourceMap": true,
    "target": "es2017"
  },
  "compileOnSave": true,
  "include": [
    "src"
  ]
}
我尝试将
“lib”:[“ES2017”、“ES2015.Promise”],
添加到上述配置中,但没有成功。如果我在vscode中“转到.finally()的定义”,它会将我带到es2018类型定义,如果我想要ES2017,它似乎不应该这样做。


如何让TypeScript捕捉到这一点,这样我就不会部署在运行时会失败的代码?

您可以更改
承诺的类型。最后,编写一个接口:

接口承诺{
最后:未定义
}
设p:Promise=newpromise(()=>5);
//错误:无法调用可能为“未定义”的对象。(2722)
p、 最后(()=>{});

Promise的类型。最后,
@types/node
的版本可能包含了
的类型


如果项目依赖于节点类型,则应确保拉入的
@types/node
版本与预期的节点版本匹配<代码>npm i@类型/node@8.x
将安装一个版本的
@types/node
,该版本不包括
Promise\finally


如果您的项目没有故意依赖节点类型,那么很有可能由于某些依赖性而将其包括在内。Typescript的默认行为是包含在
节点模块/@types
软件包中找到的任何“全局”类型,这意味着如果您安装任何依赖于
@types/node
的软件包,则将包含
@types/node

您可以通过向tsconfig的编译器选项添加
类型:[]
来解决此问题。这将防止TS包含
节点_modules/@types
中的“全局”类型,但在导入相应模块时仍将包含模块类型。(例如,
从“foo”导入foo
仍将使用
@types/foo
)您可以显式指定要包含在数组中的任何全局类型包