TypeScriptの世界へようこそ!チーフアーキテクトの私です。
新しい技術を学び始めるときって、なんだかワクワクする一方で、「覚えることが多すぎて頭がパンクしそう…」と不安になりますよね。特に型定義なんて見慣れない言葉が出てくると、それだけでそっと画面を閉じたくなる気持ち、とてもよく分かります。
でも、大丈夫ですよ。今日はそのモヤモヤをスッと解消してくれる、すごく便利で可愛い相棒――`typeof`(タイプログオフ)型演算子のお話をします。
難しい専門書を投げ捨てる準備はいいですか? それでは、身近な例えからゆっくり紐解いていきましょう。
—
1. `typeof` ってなに?(身近な例えで考えてみる)
JavaScriptやTypeScriptを触っていると、「この変数、今どんなデータが入っているんだっけ?」と迷うことがありますよね。
ここで、現実世界のお買い物を想像してみてください。
目の前に、綺麗にラッピングされた「中身が見えないプレゼントの箱」があるとします。この箱が何用(指輪用なのか、マフラー用なのか)を知りたいとき、どうしますか?
一番確実なのは、「あ、この箱はマフラーが入っていたあのブランドの紙袋だ。中身もきっとマフラーだな」と、外側のパッケージから推測することですよね。
プログラミングにおける `typeof` も、まさにこれと一緒です。
すでに存在している「実際の値(プレゼントの箱)」をパッと見て、「あ、この値なら、型はこういう形だね(中身はこういうものだね)」と、TypeScriptに型を自動で教えてもらうための「ラベル貼り機」のようなものなんです。
—
2. 値から型を自動で抽出する魔法
TypeScriptでは、通常は「変数名: 型名」というふうに、人間が手動で型を書いてあげます。
// 人間がわざわざ「これは文字列型だよ」と教えてあげる書き方
const userName: string = “たろう”;
しかし、実務の現場では「すでにそこにある定数やオブジェクトの構造を、そのまま別の場所でも使い回したい!」というシーンが本当によくあります。そんなとき、わざわざ同じ型をもう一度手書きするのは面倒ですし、将来値が変わったときに修正漏れのバグを生む原因になります。
ここで `typeof` の出番です。コードを見てみましょう。
// カフェのメニューにある「おすすめのコーヒー」という値(データ)を定義します
const recommendedCoffee = {
name: “カフェラテ”,
price: 450,
isHot: true,
};
// 【ここで typeof の登場!】
// recommendedCoffee という「実際の値」から、その構造(型)をごっそり抜き取ります
type CoffeeType = typeof recommendedCoffee;
// これで、CoffeeType は自動的に以下のような型として解釈されます:
// {
// name: string;
// price: number;
// isHot: boolean;
// }
すごくないですか? `typeof` を使うことで、わざわざ型の設計図をイチから手書きしなくても、「実際の値のコピーから、完璧な型の設計図を自動生成」できてしまうんです。
—
3. 初学者がよくつまずくポイントと、その処方箋
ここで、TypeScriptを学び始めたばかりの方が、100%と言っていいほどハマる「落とし穴」についてお話ししておきますね。
JavaScriptにも `typeof` という似た名前の機能があります。そのため、ごちゃ混ぜになって混乱してしまう人が本当に多いのです。
- JavaScriptの `typeof`:
- いつ使う?:プログラムが動いている最中(実行時)に使う。
- 何をする?:`”string”` や `”number”` といった文字を画面に出力して、データの種類を調べる。
- TypeScriptの `typeof`(今日お話ししている型演算子):
- いつ使う?:プログラムを書いている最中(コンパイル時)に使う。
- 何をする?:値から「型(TypeScript用の設計図)」を抽出する。ブラウザで実行するときには綺麗に消え去ります。
「えっ、同じ名前なのに動きが違うの!?」と焦るかもしれませんが、安心してください。TypeScriptを書いているときは、基本的には「型を作るための便利ツール」として使えばOKです。
—
4. 実務で使える!ちょっと実践的なコード例
では、もう少し実務っぽい例を見てみましょう。
例えば、アプリの設定画面で使う「選べるテーマカラー」をオブジェクトとして定義したとします。
// アプリのテーマカラーの定義(実際の値)
const THEME_COLORS = {
primary: “#3b82f6”,
secondary: “#10b981”,
warning: “#f59e0b”,
} as const; // ※ as const をつけると、値が変更不可の「本当の定数」になります
// 【チーフアーキテクトからのワンポイントアドバイス】
// ここで typeof を使って、このカラーパレットから「キーの型」を取り出してみましょう!
type ThemeColorKey = keyof typeof THEME_COLORS;
// これで ThemeColorKey は “primary” | “secondary” | “warning” という直感的な型になります!
// 実際にこの型を使う関数を作ってみます
function applyTheme(colorKey: ThemeColorKey) {
const hexCode = THEME_COLORS[colorKey];
console.log(`テーマカラーに ${hexCode} を適用しました!`);
}
// 使えるのは定義した3つのキーだけ!
applyTheme(“primary”); // ⭕️ 大成功!
// applyTheme(“pink”); // ❌ エラー:「pink」なんてテーマはないよ!とTypeScriptが優しく怒ってくれます
このように、`typeof` は単体でも便利ですが、別の機能(`keyof` など)と組み合わせることで、堅牢でミスのないフロントエンドアプリを作るための強力な武器に変身します。
—
最後に:一歩ずつ、楽しみながら進もう
TypeScriptの型システムは、最初は厳格な監視役のように感じられて窮屈に思えるかもしれません。でも、それはあなたを縛るためではなく、「未来のバグからあなたを守り、コードを書く手をそっと支えてくれる優しい相棒」なんです。
`typeof` も、使いこなせるようになると「お、分かってるね!」とコードがスマートに書けるようになる魔法のステッキです。
今日から、定数やオブジェクトを書くたびに、「あ、これ `typeof` で型にできるな」と頭の片隅で思い出してみてくださいね。
焦らず、自分のペースで一歩ずつ進んでいきましょう。応援しています!

コメント