我很确定自己可以解决此问题,但是如果它可以帮助其他人,我想分享并节省其他人的时间。
我必须添加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导入的那张上。
有什么主意吗?
答案 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兼容性的人。很高兴看到这一点引起注意。以下是一些选项:
finally
tsconfig.json
安装垫片,在应用程序开始时运行一次polyfill,然后从此开始使用全局{
"compilerOptions": {
"lib": ["DOM","ES5","ScriptHost", "es2018.promise"]
}
}
对象,而不是继续从Promise
导入Promise
类。我发现这是最可互操作的方式。
es6-promise
请注意,在最近的几个发行版中,npm install --save es6-promise@latest
一直在捆绑自己的类型,这些类型与TypeScript内置的es6-promise
库的类型冲突。
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"]
....
}