88 views
B!0X

Googleがinterfaceを好む理由

google-typescript-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: 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

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

関連事例

  • データ分析支援

    事例:過去実績を提案に活用する分析の仕組み

    広告代理店との取り組みです。同社は過去実績の示唆を次の提案へ反映し、結果をどのように予測したか、その背景まで提案先のクライアントへ説明できるようになりました。KDOT は案ごとの見込みと判断材料を比較できる仕組みを業務アプリとして実装しました。さらに業務アプリの中核となる処理ロジックと機械学習モデルについて、特許手続きを担う弁理士が技術の新規性や工夫を検討するための資料を作成しました。その後この発明には特許が付与されました。

  • プロダクト / Web システム開発 / プロダクトマネジメント(PdM)支援

    事例:工場向け電力見える化製品の開発

    製造業向けにソフトウェア製品を提供する企業との取り組みです。同社は工場の電力を見える化する機能を製品に追加したいと考えていましたが、社内の開発者だけでは手も知見も不足していました。電力計の接続から、データを工場の判断に活用できる形にするところまでを開発支援会社の KDOT に一括で委託し、同社は着手から約 4 か月でこの機能を製品に追加して工場へ販売できるようになりました。納品後の約 9 か月は KDOT が運用を担い、支援が終了した現在は同社が自ら運用を継続しています。

開発の相談先をお探しですか。

この記事に関わることについてご相談がある方はお問い合わせください。

KDOT についてお問い合わせ