最新のコンパイラ バージョンを使用するために古い TypeScript コードをアップグレードしているのですが、 の呼び出しで問題が発生しています。このコードは、数値を返すsetTimeout
ブラウザーの関数を呼び出すことを想定しています。setTimeout
setTimeout(handler: (...args: any[]) => void, timeout: number): number;
ただし、コンパイラはこれをノード実装に解決し、NodeJS.Timer を返します。
setTimeout(callback: (...args: any[]) => void, ms: number, ...args: any[]): NodeJS.Timer;
このコードはノードでは実行されませんが、ノードの型指定は他の何か(何なのかは不明)への依存関係として取り込まれます。
setTimeout
必要なバージョンを選択するようにコンパイラに指示するにはどうすればよいですか?
問題のコードは次のとおりです。
let n: number;
n = setTimeout(function () { /* snip */ }, 500);
これにより、コンパイラ エラーが発生します。
TS2322: タイプ「Timer」はタイプ「number」に割り当てることができません。
ベストアンサー1
let timer: ReturnType<typeof setTimeout> = setTimeout(() => { ... });
clearTimeout(timer);
を使用すると、ReturnType<fn>
プラットフォームから独立できます。どちらも使用することを強制されることはなくany
、また、コードを nodeJS サーバーで実行した場合に壊れるwindow.setTimeout
こともありません(例: サーバー側でレンダリングされたページ)。
良いニュースです。これは Deno とも互換性があります。