arthur-osipyan-5OyvN4Yx46E-unsplash.jpg

Googleがinterfaceを好む理由

 
0
このエントリーをはてなブックマークに追加
Kazuki Moriyama
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

報告自体は半年くらい前なので今もこの問題が残っているかは要調査。

info-outline

お知らせ

K.DEVは株式会社KDOTにより運営されています。記事の内容や会社でのITに関わる一般的なご相談に専門の社員がお答えしております。ぜひお気軽にご連絡ください。