【TypeScript】interfaceとtypeの違い
Categories:
typescript
いきさつ
いつもてきとーにつかってますが、イマイチわかってませんでした。 何が違うの? なぜそんなものがあるの?
interface
常に名前付きのオブジェクトになる
いわゆるオブジェクト指向におけるClassに対してのinterface。 なのでextendやimplementsとして使うことができる。
type
集まり。 拡張(extend)とかできない。 インスタンスの新しい名前を作成しない。 名前に特に意味はなく変数咬ませない場合は不要。 変数咬ませる場合はそれをtype alias
とか言ったりするみたい。 主にユニオンやタプルタイプの場合に使用する。
補足ユニオンとタプルタイプの違いとは?
ユニオンtype
// どっちか
type foo = string | number;
タプルとは? 複数の構成要素からなる組を総称する一般概念。 …ということでこんな感じ
// key:valとかの型も定義できる。
let tuple: [number, boolean] = [1, true];
結論
基本的にはインターフェイスを使うはず。 そしてそれを組みわせて使うときにはtype。 こんなかんじ。
// インターフェイスと
interface ICarParts {
name: string,
weight: number
}
// インターフェイスを
interface IBikeParts {
name: string,
weight: number
}
// 組み合わせてtype aliasを作る
type Products = ICarParts | IBikeParts
// いずれかのパーツであることを保証する
function getProduct():Products{
//todo:
}
翻訳
https://www.typescriptlang.org/docs/handbook/advanced-types.html#interfaces-vs-type-aliases