TypeScriptのtypeとは、型に名前を付けて、何度も使いやすくするための書き方です。正式には型エイリアスと呼ばれます。
たとえば、ユーザー情報を表す型を毎回{ id: number; name: string }と書くのは読みにくくなります。そこでtype User = ...のように名前を付けます。
初心者が迷いやすいのは、typeとinterfaceの違いです。どちらもオブジェクトの形を表せますが、得意な使いどころが少し違います。

最初は「typeは型に名前を付ける」「interfaceはオブジェクトの形を宣言する」と分けて考えると理解しやすいです。
この記事では、TypeScriptのtypeとは何か、基本構文、union型での使い方、interfaceとの違い、実務での使い分けを初心者向けに解説します。
まず結論:typeは型に名前を付ける書き方
typeは、型に別名を付けるために使います。TypeScript公式ドキュメントでも、type aliasは任意の型に名前を付けるものとして説明されています。
type User = {
id: number;
name: string;
};
const user: User = {
id: 1,
name: "Sato",
};
この例では、{ id: number; name: string }というオブジェクトの型に、Userという名前を付けています。
一度名前を付けると、変数、関数の引数、戻り値などで同じ型を使い回せます。
typeが必要になる理由
TypeScriptでは、型を直接書くこともできます。
function printUser(user: { id: number; name: string }) {
console.log(user.name);
}
短いコードならこれでも問題ありません。しかし、同じ型を何度も書くと、コードが長くなり、修正漏れも起きやすくなります。
typeを使うと、型の意味が名前で分かるようになります。
type User = {
id: number;
name: string;
};
function printUser(user: User) {
console.log(user.name);
}
このように、typeはコードを短くするためだけでなく、型の意味を名前で伝えるために使います。
typeの基本構文
typeの基本構文は次の通りです。
type 型名 = 型;
オブジェクト型に名前を付ける場合は、次のように書きます。
type Product = {
id: number;
name: string;
price: number;
};
関数の引数や戻り値にも使えます。
function formatProduct(product: Product): string {
return `${product.name}: ${product.price}円`;
}
TypeScriptの型注釈や関数の基本がまだ曖昧な場合は、TypeScript超入門やTypeScriptの関数宣言/関数式を先に読むと理解しやすくなります。
typeはunion型にも名前を付けられる
typeの大きな特徴は、オブジェクト型だけでなく、union型にも名前を付けられることです。
type ID = number | string;
function findUser(id: ID) {
console.log(id);
}
number | stringは、「数値または文字列」という意味です。このような型をunion型と呼びます。
毎回number | stringと書く代わりにIDと名付けることで、「これはIDとして扱う値だ」と読み取りやすくなります。
この図では、typeを「型そのものを作る魔法」ではなく、型に名前を付けて使いやすくする入口として見てください。

interfaceとの違い
typeとinterfaceは、どちらもオブジェクトの形を表せます。
type UserType = {
id: number;
name: string;
};
interface UserInterface {
id: number;
name: string;
}
この例だけを見ると、ほとんど同じに見えます。実際、単純なオブジェクト型であれば、どちらでも表せます。
| 観点 | type | interface |
|---|---|---|
| オブジェクト型 | 表せる | 表せる |
| union型 | 表せる | 基本的には表せない |
| tuple型 | 表せる | 向いていない |
| 後から同じ名前で拡張 | できない | できる |
| クラスのimplements | 使える場合がある | よく使われる |
TypeScript公式ドキュメントでも、ほとんどのinterfaceの機能はtypeでも使える一方、interfaceは後から拡張できる点が大きな違いとして説明されています。
すでにTypeScriptのinterfaceを読んでいる場合は、この記事と合わせて見ると使い分けが整理しやすくなります。
typeを使うとよい場面
typeは、次のような場面で特に便利です。
たとえば、状態を文字列で表す場合はtypeが分かりやすいです。
type Status = "loading" | "success" | "error";
function render(status: Status) {
if (status === "loading") {
return "読み込み中";
}
if (status === "success") {
return "成功";
}
return "エラー";
}
このように書くと、statusには決められた文字列だけを渡せます。入力ミスにも気づきやすくなります。
interfaceを使うとよい場面
一方、interfaceは、オブジェクトの形を中心に扱う場面でよく使われます。
たとえば、クラスが持つべきメソッドを表す場合はinterfaceが読みやすいことがあります。
interface Repository {
findById(id: string): Promise<User>;
save(user: User): void;
}
ただし、これは絶対ルールではありません。プロジェクトごとのコーディング規約がある場合は、それに従うのが実務では重要です。
初心者がつまずきやすいポイント
| つまずき | まずこう理解する |
|---|---|
| typeは新しい型を作る? | 別名を付けているだけ。別の実体が増えるわけではない |
| interfaceと完全に同じ? | 似ているが、union型や拡張方法が違う |
| 全部typeでよい? | 規約や拡張前提によってinterfaceが向く場面もある |
| 実行時にも残る? | TypeScriptの型情報なので、基本的にJavaScript実行時には残らない |
特に重要なのは、typeは実行時の値ではなく、開発中にコードを安全に読むための型情報だという点です。
実務での使い分けの目安
迷ったときは、次のように考えると整理しやすくなります。
| 使いたいもの | おすすめ | 理由 |
|---|---|---|
| union型 | type | "a" | "b"のような型に名前を付けられる |
| tuple型 | type | 配列の位置ごとの型を表しやすい |
| 単純なデータの形 | どちらでもよい | プロジェクト規約に合わせる |
| 拡張される契約 | interface | 後から拡張しやすい |
初心者のうちは、まずtypeでunion型、interfaceでオブジェクトの契約、と覚えると混乱しにくくなります。
関連して読みたい記事
まとめ
TypeScriptのtypeは、型に名前を付けるための書き方です。
最初は、type ID = number | stringのような短い例から始めると理解しやすくなります。慣れてきたら、APIレスポンスや画面状態の型にも使ってみましょう。
