Googleがinterfaceを好む理由

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: ReadCallba

これが生成する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

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

TypeScriptとHigher Kinded Type(高階型) fp-tsとSemigroup react digraph使い方
View Comments
There are currently no comments.