Je suis sûr que je serai en mesure de résoudre ce problème par moi-même, mais si cela peut aider quelqu'un d'autre, je veux partager et faire gagner du temps à quelqu'un d'autre.
J'ai dû ajouter le es6-promise
bibliothèque pour se débarrasser de cette erreur
Promise only result to a type, but is only used as a value here.
quand j'essayais d'utiliser Promise.all (voir cette discussion ). Cela a bien fonctionné jusqu'à présent, je reçois une erreur lorsque j'essaie d'utiliser une promesse de MongoDB.
Promise<whatever> is not assignable to Promise<any>
Property 'finally' is missing in type Promise<whatever>
Selon ce problème sur es6-promise (si j'ai bien compris), la nouvelle propriété enfin brise la compatibilité. Il est là sur le retour de Promise Mongo mais pas sur celui que j'ai importé de es6-promise.
Une idée?
Je suis celui qui a noté que le shim finally
cassait la compatibilité de Promise sur ce problème lié . Ravi de voir cela attirer l'attention. Voici quelques options:
tsconfig.json
{
"compilerOptions": {
"lib": ["DOM","ES5","ScriptHost", "es2018.promise"]
}
}
Installez le shim, exécutez le polyfill une fois au début de votre application et utilisez ensuite l'objet global Promise
plutôt que de continuer à importer la classe Promise
depuis es6-promise
. J'ai trouvé que c'était le moyen le plus interopérable.
npm install --save es6-promise@latest
Notez que es6-promise
a, pour les dernières versions, regroupé ses propres typages qui entrent en conflit avec les typages des librairies Promise
intégrées de TypeScript.
es6-promise
qui n'inclut pas le finally
shimRemarque: bien sûr, cela signifie que vous ne pouvez pas utiliser finally
{
"compilerOptions": {
"lib": ["DOM","ES5","ScriptHost"]
}
}
Installez la dernière version de es6-promise
avant d'introduire finally
, et utilisez ces saisies:
npm install --save [email protected] && npm install --save-dev @types/[email protected]
(Ou sinon, omettez ces saisies et ajoutez es2015.promise
à ton compilerOptions.lib
tableau dans tsconfig.json
.)
Si tout ce dont vous avez besoin est une définition de type correcte pour un Promise
, vous pouvez simplement utiliser les définitions intégrées fournies avec TypeScript (je le dis parce que vous notez que la promesse avec laquelle vous travaillez a le finally
méthode comme prévu).
Pour ce faire, supprimez es6-promise
formez votre projet et dans tsconfig
changez votre lib en:
{
....
"lib": ["es5","es2015.promise","dom", "scripthost"]
....
}