項目70 型を部分的にコピーして依存を断ち切る
公開するnpmパッケージでは、型の推移的依存関係を避ける
下記のようにNode.jsユーザーでも利用できるような型を取り入れると、Node依存の@types/nodeのパッケージ追加が必要になる
Buffer
code:ts
import { Buffer } from 'node:buffer';
export declare function parseCSV(contents: string | Buffer): {
column: string: string;
}[];
これは、ブラウザ環境でしか動作しないコードを書く人には、不要なライブラリになる
このような依存関係を生む型定義は避けるべき
構造的型付けを使って、本質的でない依存を断ち切る
BufferのtoStringのみしか利用しない場合は、既存の型定義ではなく自分で書いたほうが遥かにライブラリに対する依存を少なくすることができる
Goコミュニティでは「少しの依存パッケージより、少しのコピーの方が良い」と言われている
code:ts
export interface CsvBuffer {
toString(encoding?: string): string;
}
export function parseCSV(
contents: string | CsvBuffer
): {column: string: string}[] {
// ...
}
JavaScriptユーザーに@typesへの依存を強制しない。Web開発者にNode.jsへの依存を強制しない。
#TypeScript