Closed1
TypeScriptによる型定義の記述方法に関して

interface
とtype
のどちらを使うべきか
(本件に1つの正解はないということを前提に踏まえた上で)interface
の再宣言による拡張で意図しない問題が発生しかねないので、type
に統一して使う方が安全だと考える。
interface
を使うことで、一部の条件でビルド時にキャッシュが効いたり、type
を使うことで(限定的に)発生する不安定な挙動も避けることができるが、それらを上回りtype
を使う上記メリットの方が大きいと個人的に感じている。
拡張が可能かどうか
interdace
は拡張できるが、type
は拡張できない。例は以下の通り。
// 下記の記述(拡張)が可能
interface hoge {
foo: string;
}
interface hoge {
bar: number;
}
const hogehoge: hoge = {
foo: "jack",
bar: 0
};
// 下記それぞれに「識別子 'hoge' が重複しています」というエラーが発生する
type hoge = {
foo: string;
}
type hoge = {
bar: number;
}
Union Type、Tuple Type、Mapped Typesが利用可能かどうか
Type
では下記記述のような型設定が可能になる。
// Union
type Hoge = "fuga" | "piyo"
// Tuple
type Foo = [number, string]
// Mapped Types
type Butterfly = {
[key in Hoge]: string;
};
参考
このスクラップは2024/11/29にクローズされました