本文へスキップ
BecomeCoder

TypeScriptコース · 第3章 オブジェクトと型 · レッスン10

type とオプショナルプロパティ

ブラウザで完結

導入

型に名前を付ける方法は interface のほかに type(型エイリアス)もあります。また、「あってもなくてもよいプロパティ」は ? を付けて表します。

説明

type は型に別名を付けるしくみです。オブジェクトの形だけでなく、ユニオン型などにも名前を付けられます。

type Point = { x: number; y: number };
type Direction = "up" | "down" | "left" | "right";

let p: Point = { x: 10, y: 20 };
let d: Direction = "up";
console.log(p.x, p.y, d);

プロパティ名のうしろに ? を付けると、そのプロパティは省略可能になります。

type Profile = {
  name: string;
  nickname?: string;   // あってもなくてもよい
};

let a: Profile = { name: "太郎" };                 // OK(nickname なし)
let b: Profile = { name: "花子", nickname: "はな" }; // OK
console.log(a.nickname);   // undefined
console.log(b.nickname);   // はな

interfacetype はどちらもオブジェクトの型に使えます。ユニオン型などにも名前を付けたいときは type、オブジェクトの形を素直に表すなら interface、と使い分けられます。

やってみよう

Profileaa.nickname = "たろ"; を足してから console.log(a.nickname) してみましょう。

演習

Item という type を作ってください。name(string)と、省略可能な note(string)を持ちます。note を付けずに let x: Item = { name: "箱" }; を宣言し、console.log(x.note) を表示してください(undefined と出ます)。

ヒント1を見る

type Item = { name: string; note?: string }; と書きます。? を忘れると note が必須になります。

実際に動かしてみよう

下のエディタにTypeScriptを書いて「実行」を押すと、その場でJavaScriptに変換してブラウザ内で実行し、出力が表示されます。本文の例をそのまま試したり、型注釈を書き換えたりしてみましょう(console.log の結果が下に出ます。初回だけコンパイラの読み込みに少し時間がかかります)。

TypeScript — ブラウザ内で実行

TypeScriptコンパイラ(同梱)でTS→JSに変換してから実行する学習用環境を読み込みます(初回のみコンパイラの読み込みに少し時間がかかります)。
スクロールして表示された時点でも自動で読み込まれます。