ES Module の import defer

🦥
note

TypeScript 5.9 の告知を見て知ったのだが、 import はするがその評価を遅延する、という構文が ES の Stage 3 になっている。

従来 importrequire と同時に大きな副作用なあるようなモジュールを読み込む際、それを実際に使用するまで読み込みを遅延するようなテクニックがあった。例えば、 require を使った次のようなコードである( Proposal からの引用):

// https://github.com/tc39/proposal-defer-import-eval/?tab=readme-ov-file#motivation
exports.doSomething = function (target) {
  const operation = require('operation');
  return operation(target);
}

これを解決するスマートな構文として次のようなものが提案されている( Proposal からの引用):

// https://github.com/tc39/proposal-defer-import-eval/?tab=readme-ov-file#proposal
import defer * as yNamespace from "y";

頻度はそう高くないが、 ESM で書いている場合に require の例のような記述をすることは諦めていたので、なるほどなぁとなる提案だった。

yaakai.to