私はこの問題を自分で解決できると確信していますが、それが他の誰かを助けることができれば、他の誰かと共有して時間を節約したいです。
このエラーを取り除くには、es6-promise
ライブラリを追加する必要がありました
Promise only result to a type, but is only used as a value here.
promise.allを使おうとしたとき( この説明 を参照)。今までは問題なく動作しましたが、MongoDBのPromiseを使用しようとするとエラーが発生します。
Promise<whatever> is not assignable to Promise<any>
Property 'finally' is missing in type Promise<whatever>
es6-promiseのこの問題 (正しく理解できた場合)によると、新しいfinallyプロパティは互換性を壊しています。 Promise Mongoのリターンにはありますが、es6-promiseからインポートしたものにはありません。
何か案が?
私はfinally
シムがPromiseの互換性を壊していた リンクされた問題 と指摘した人です。これが注目を集めているのを見てうれしいです。ここにいくつかのオプションがあります:
tsconfig.json
{
"compilerOptions": {
"lib": ["DOM","ES5","ScriptHost", "es2018.promise"]
}
}
シムをインストールし、アプリの開始時にポリフィルを1回実行します。それ以降は、es6-promise
からPromise
クラスをインポートし続けるのではなく、グローバルPromise
オブジェクトを使用します。これが最も相互運用可能な方法であることがわかりました。
npm install --save es6-promise@latest
es6-promise
は、最近のいくつかのリリースでは、TypeScriptの組み込みPromise
libsの型指定と競合する独自の型指定をバンドルしています。
finally
シムを含まない古いバージョンのes6-promise
を使用します注:もちろん、これはfinally
を使用できないことを意味します
{
"compilerOptions": {
"lib": ["DOM","ES5","ScriptHost"]
}
}
finally
を導入する前のes6-promise
の最新バージョンをインストールし、それらの入力を使用します。
npm install --save [email protected] && npm install --save-dev @types/[email protected]
(または、その他の入力を省略して、es2015.promise
をcompilerOptions.lib
のtsconfig.json
配列に追加します。)
Promise
の正しい型定義だけが必要な場合は、TypeScriptに付属の組み込み定義を使用できます(実際に使用しているプロミスにはfinally
メソッドは期待どおりです)。
これを行うには、es6-promise
プロジェクトを作成し、tsconfig
でlibを次のように変更します。
{
....
"lib": ["es5","es2015.promise","dom", "scripthost"]
....
}