型エイリアスとは何か(ざっくり言うと「型にあだ名をつける」)
型エイリアスは、既にある型に「別名(あだ名)」をつける仕組みです。type キーワードを使って、「この型をこれからはこの名前で呼ぶね」と宣言します。
type UserId = number;
type UserName = string;
TypeScriptここでは「number 型に UserId という名前をつけた」「string 型に UserName という名前をつけた」というだけです。
実行時の動きは一切変わりませんが、コードを読む人間にとって「意味」が一気に分かりやすくなるのがポイントです。
基本構文:type 新しい名前 = 型
一番シンプルな書き方
type Point = {
x: number;
y: number;
};
const p: Point = {
x: 10,
y: 20,
};
TypeScripttype Point = { ... } で、「{ x: number; y: number } という形のオブジェクトを、これからは Point と呼ぶ」と決めています。
以降は { x: number; y: number } を毎回書かなくても、Point という短くて意味のある名前で表現できます。
ここで大事なのは、「新しい型を発明している」のではなく、「既存の型にラベルを貼っているだけ」という感覚です GeeksForGeeks。Point という名前を消しても、実体はただの { x: number; y: number } です。
なぜ型エイリアスが必要になるのか(メリットのイメージ)
同じ型を何度も書かなくてよくなる
例えば、ユーザー情報をあちこちで使うとします。
// 型エイリアスなし
function printUser(user: { id: number; name: string }) { ... }
function saveUser(user: { id: number; name: string }) { ... }
function deleteUser(user: { id: number; name: string }) { ... }
TypeScriptこれを型エイリアスでまとめると、こうなります。
type User = {
id: number;
name: string;
};
function printUser(user: User) { ... }
function saveUser(user: User) { ... }
function deleteUser(user: User) { ... }
TypeScript1か所直せば全部に反映されるので、修正漏れやコピペミスを防げます。
「同じ形を何度も書いているな」と感じたら、型エイリアスに切り出すタイミングです。
「意味のある名前」をつけることで、コードの意図が伝わる
type Email = string;
type Password = string;
TypeScriptどちらも中身は string ですが、Email と Password という名前が付くだけで、
「ここには何を入れるつもりなのか」が一目で分かります。
function login(email: Email, password: Password) { ... }
TypeScriptただの string よりも、「ここはメールアドレス」「ここはパスワード」という意図が型レベルで伝わるようになります。
オブジェクト型に型エイリアスをつける(よく使う基本パターン)
オブジェクトの形に名前をつける
type User = {
id: number;
name: string;
age: number;
};
const u1: User = {
id: 1,
name: "Taro",
age: 20,
};
function printUser(user: User) {
console.log(user.name);
}
TypeScriptここでやっていることは、
- 「
id, name, ageを持つオブジェクト」という構造を1か所にまとめる - その構造を
Userという名前で再利用する
という2点です。
もしあとから「age を birthYear に変えたい」となっても、User の定義を1か所直せば済みます。
「構造の定義」と「利用する場所」を分離できるのが、型エイリアスの大きな価値です。
ユニオン型にも型エイリアスをつけられる
「複数の型のどれか」を表す型に名前をつける
type Status = "success" | "error" | "loading";
let s: Status;
s = "success"; // OK
s = "error"; // OK
s = "loading"; // OK
// s = "done"; // エラー
TypeScript"success" | "error" | "loading" というユニオン型に Status という名前をつけています。
これで、「この変数はこの3つのどれかしか取らない」というルールを、短く・分かりやすく表現できます。
もっと複雑なユニオン型でも同じです。
type ApiResult =
| { status: "success"; data: string }
| { status: "error"; message: string };
TypeScriptこの長い型に ApiResult という名前をつけておけば、
関数の引数や戻り値にそのまま使えて、コードの意図がかなり読みやすくなります。
型エイリアスとinterfaceの違いをざっくりだけ押さえる
どちらも「オブジェクトの形」に名前をつけられる
type UserByType = {
id: number;
name: string;
};
interface UserByInterface {
id: number;
name: string;
}
TypeScriptこの2つは、ほぼ同じ意味です Qiita。
初心者のうちは、「オブジェクトの形に名前をつけるなら、とりあえず type でも interface でもいい」くらいの理解で十分です。
より細かい違い(拡張の仕方など)は、
「型エイリアスに慣れてから」「実際に困ったとき」に覚えればOKです。
型エイリアスを使うときに意識してほしいこと
「意味のある名前」をつける
type A = string; よりも、type UserName = string; の方が圧倒的に読みやすいです。
「この型は何を表しているのか?」が名前から伝わるかを、いつも少しだけ意識してみてください。
「繰り返し出てくる形」を見つけたら、まずエイリアスにする
同じ { id: number; name: string } を2回以上書いたら、
「これ、User って名前をつけた方がよくない?」と一度立ち止まる。
この癖がつくと、コードの見通しが一気によくなります。
まとめ:型エイリアスは「型に名前をつけて、設計をハッキリさせる道具」
型エイリアスは、難しい機能ではありません。
やっていることはただひとつ——「型に名前をつける」だけです。
でも、その効果はかなり大きいです。
- 同じ型を何度も書かなくてよくなる
- 「この型は何を表しているのか」が名前から伝わる
- 修正が1か所で済むので、設計変更に強くなる
「この形、何度も出てくるな」「この型、名前があった方が意味が伝わるな」
そう感じた瞬間が、型エイリアスを作るベストタイミングです。
