在承诺中使用.finally()时如何使TypeScript出错
我在节点8上使用Google云函数,它不支持.finally(),有时我会忘记并使用.finally()部署代码 tsconfig.json在承诺中使用.finally()时如何使TypeScript出错,typescript,Typescript,我在节点8上使用Google云函数,它不支持.finally(),有时我会忘记并使用.finally()部署代码 tsconfig.json { "compilerOptions": { "module": "commonjs", "noImplicitReturns": true, "outDir": "lib", "sourceMap": true, "target": "es2017" }, "compileOnSave": true,
{
"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
)您可以显式指定要包含在数组中的任何全局类型包