Promise类型的财产最终丢失了

时间:2018-07-04 13:20:14

标签: typescript es6-promise finally

我很确定自己可以解决此问题,但是如果它可以帮助其他人,我想分享并节省其他人的时间。

我必须添加es6-promise库才能消除此错误

Promise only result to a type, but is only used as a value here.

当我尝试使用Promise.all时(请参阅this discussion)。到现在为止,它运行良好,尝试使用MongoDB中的Promise时出现错误。

Promise<whatever> is not assignable to Promise<any>
    Property 'finally' is missing in type Promise<whatever>

根据this issue on es6-promise(如果我没看错),新的finally属性破坏了兼容性。它在Promise Mongo退货单上存在,但不在我从es6-promise导入的那张上。

有什么主意吗?

2 个答案:

答案 0 :(得分:2)

我是一位注意到--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-237-d6ecaf92029c> in <module>() 4 # newdict = {} 5 for k, v in mydict.items(): ----> 6 newdict[k]['AvgScore'] = v['Score']/v['NumberOfTimes'] 7 8 #sorted(newdict.items()) TypeError: string indices must be integers 填充片破坏了该linked issue的Promise兼容性的人。很高兴看到这一点引起注意。以下是一些选项:

1。完全依靠TypeScript核心库的输入

finally

tsconfig.json

安装垫片,在应用程序开始时运行一次polyfill,然后从此开始使用全局{ "compilerOptions": { "lib": ["DOM","ES5","ScriptHost", "es2018.promise"] } } 对象,而不是继续从Promise导入Promise类。我发现这是最可互操作的方式。

es6-promise

请注意,在最近的几个发行版中,npm install --save es6-promise@latest 一直在捆绑自己的类型,这些类型与TypeScript内置的es6-promise库的类型冲突。

2。使用不包含填充Promise的较早版本的es6-promise

注意:当然,这意味着您不能使用finally

finally

{ "compilerOptions": { "lib": ["DOM","ES5","ScriptHost"] } } 引入es6-promise之前安装最新版本的finally,并使用以下键入内容:

npm install --save es6-promise@4.2.2 && npm install --save-dev @types/es6-promise@0.0.32

(或者省略这些类型并将es2015.promise添加到compilerOptions.lib中的tsconfig.json数组中。)

答案 1 :(得分:0)

如果您所需要的只是Promise的正确类型定义,那么您就可以使用typescript附带的内置定义(之所以这样说是因为您注意到实际使用的诺言具有finally方法如预期)。

为此,请从您的项目中删除es6-promise,然后在tsconfig中将lib更改为:

{
    ....
    "lib": ["es5","es2015.promise","dom", "scripthost"] 
    ....
}