Googleがinterfaceを好む理由
Kazuki Moriyama (森山 和樹)
Googleはinterfaceが好き
style guideにそう書いてある。
https://google.github.io/styleguide/tsguide.html#interfaces-vs-type-aliases
理由はinterfaceが好まれるテクニカルな理由があるとのこと。
参照に挙げられていた記事を読んでみよう。
https://ncjamieson.com/prefer-interfaces/
itnerfaceを使うとd.tsのコード量が少なくなる可能性がある
例えば以下のようなコードがある。(palyground)
type ReadCallback = (content: string) => string;
function read(path: string, callback: ReadCallback): void;
これが生成するd.tsは以下のようになる。
declare type ReadCallback = (content: string) => string;
declare function read(path: string, callback: ReadCallback): void;
普通。
ただスコープが絡むとちょっと厄介なことになる。
これが(playground)
const read = (() => {
type ReadCallback = (content: string) => string;
return function (path: string, callback: ReadCallback) {};
})();
これを生成する。
declare const read: (
path: string,
callback: (content: string) => string
) => void;
まあinline化されちゃうんですね。
しかしinterfaceは常に参照されることになる。
そしてプライベートな名前を参照しているとコンパイルエラーを起こす。(playground)
要するに使い方によってはtype aliasの実態がinline化されまくってコード量が増えてしまうということだ。
ちなみにもともとこの問題を報告していた方のtwitter
https://twitter.com/robpalmer2/status/1319188885197422594
報告自体は半年くらい前なので今もこの問題が残っているかは要調査。