導入
ライブラリが用意している型(たとえば Window など)に、自分でプロパティを追加したいことがあります。TypeScript では、同じ名前の interface を複数回書くと、自動的に1つにまとめられます。これを宣言マージ(declaration merging)と呼びます。
説明
同じ名前で interface を2回書くと、両方のプロパティを持つ1つの型として扱われます。
interface Config {
host: string;
}
interface Config {
port: number;
}
// Config は自動的に { host: string; port: number } にマージされる
const config: Config = { host: "localhost", port: 8080 };
console.log(config.host, config.port);
type エイリアスは同じ名前で2回定義するとエラーになりますが、interface はこのように複数回書けて、それらが1つにまとまる点が大きな違いです。ライブラリの型定義に自分の型を足す「モジュール拡張」(module augmentation)でも、この仕組みが使われています。
やってみよう
interface Config { timeout: number; } を3つ目として追加し、config に timeout: 5000 を足して console.log(config.timeout) を試してみましょう。
演習
interface Animal { name: string; } と interface Animal { sound: string; } を別々に宣言してマージしてください。Animal 型の変数 cat に name: "猫", sound: "ニャー" を入れ、console.log(cat.sound) で表示してください。
ヒント1を見る
同じ名前で interface Animal { name: string; } と interface Animal { sound: string; } を別々に書きます。
ヒント2を見る
const cat: Animal = { name: "猫", sound: "ニャー" }; console.log(cat.sound);