はじめに
TypeScriptを勉強していて、interface
とtype
というものに出会いました。パッと見た時にどちらもオブジェクトの型を指定するものなのかな?と思いました。今回は、それらがどういったものか調べまとめてみました。
TypeScriptのinterfaceとtypeについて調べてみた
interfaceとは
interface
は、オブジェクトやクラスの構造を定義するものです。以下のような感じで構造を定義できます。
interface Book {
name: string;
price: number;
}
const book: Book = {
name: "book",
price: 1000,
};
interface
は、extends
キーワードを使ってinterface
の継承を行うことができます。
interface Book {
name: string;
price: number;
}
interface Novel extends Book {
category: string;
}
const novel: Novel = {
name: "novel",
price: 800,
category: "mystery",
};
また、既に定義したinterface
と同じ名前のものを宣言することができます。宣言後、既に定義されたものと後から宣言されたものはマージされます。
interface Animal {
name: string;
}
interface Animal {
classification: string;
}
const animal: Animal = {
name: "animal",
classification: "mammal",
}
typeとは
type
は、型エイリアスと呼ばれ、型に名前をつけることができます。interface
と違い、オブジェクトやクラスの型を宣言するだけではなく、プリミティブ型などに名前をつけることができます。またこれに加えて、type
ではunion型やtuple型を扱えるのもinterface
と違うところです。
type Num = number;
type StringOrNull = string | null;
type Book = {
name: string,
price: number,
};
const book: Book = {
name: "book",
price: 1000,
};
type
はinterface
と違い、継承を行うことはできません。しかし、交差型を使って継承と似たようなことができます。
type Book = {
name: string,
price: number,
};
type Novel = Book & {
category: string,
};
const novel: Novel = {
name: "novel",
price: 800,
category: "mystery",
};
またinterface
のように、既に宣言されたものと同じ名前を型エイリアスを宣言することはできません。
type Animal = {
name: string,
};
type Animal = {
classification: string,
};
// => ERROR
さいごに
今回は、TypeScriptのinterface
とtype
の違いについてまとめてみました。状況や用途、開発のルールに従って、使い分けができるといいのかなと思いました。何かわかったことがあれば、追記しようと思います。