投稿数 585
公開から 2940

【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