TypeScript - setTimeout の正しいバージョンを使用する (ノードとウィンドウ) 質問する

TypeScript - setTimeout の正しいバージョンを使用する (ノードとウィンドウ) 質問する

最新のコンパイラ バージョンを使用するために古い 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 とも互換性があります。

おすすめ記事