1. ホーム
  2. タイプスクリプト

[解決済み】TypeScriptのインターフェースと型について

2022-03-18 03:31:18

質問

これらの文の違いは何ですか( interfacetype )をTypeScriptで作成することはできますか?

interface X {
    a: number
    b: string
}

type X = {
    a: number
    b: string
};

解決方法は?

2021年3月更新 : より新しい「TypeScriptハンドブック」(でも紹介されています。 nju-clc 以下の回答 という項目があります。 インターフェースとタイプエイリアスの比較 で、その違いについて説明しています。


オリジナルアンサー(2016年)

の通りです。 (現在はアーカイブされている)TypeScript言語仕様 :

インターフェース宣言とは異なり、常に名前の付いたオブジェクトの型を導入します。 型エイリアス宣言 は、プリミティブ型、ユニオン型、交差型を含む、あらゆる種類の型の名前を導入することができます。

仕様書には、さらに次のような記載があります。

インターフェイスの種類 の型エイリアスとの類似点が多くあります。 しかし、インターフェース型はより多くの機能を提供するため は、一般に型エイリアスよりも優先されます。例えば、インターフェイス型

interface Point {
    x: number;
    y: number;
}

は、型の別名として書くことができます。

type Point = {
    x: number;
    y: number;
};

ただし、そうすると、以下の機能が失われることになります。

  • <ストライク インターフェイスは extends 節または implements 節で命名できるが、オブジェクトの型リテラルの型エイリアスは命名できない。 TS 2.7以降、真でなくなった。
  • インターフェースは、複数の マージされた宣言 しかし、オブジェクト型リテラルに対する型エイリアスはそうではありません。