Islands in the byte stream

Technical notes by a software engineer

ES modulesのexport defaultは使わないほうがよい

ES modulesにexport defaultってのがあるんですが、default exportのexport対象に名前が必須でないため、IDEによるコード補完と相性が悪いです。

他のところはどうしてるのかなと思って調べてみると、GoogleのTypeScript Style Guideでは禁止されてました。

Microsoftのcoding guidelineには特に言及はないみたいですね。

そもそもexport defaultは仕様が不安定で処理系によって挙動が異なる困ったヤツ*1*2という認識です。

総じて見るとメリットは特になくデメリットがいくつかあるという状態なので、「使わない」とするのがよさそうな気がします。

*1:うちだとBabelからTypeScriptに移行するときに import React from "react" を import * as React from "react" に書き換える必要がありました。このケースで誰が悪いのかは調べてませんが…。

*2:追記: TypeScript 2.7 でこの部分はCommonJSとの相互運用できる変換オプションが追加されたようです (--esModuleInterop) https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-7.html