
TypeScriptの基本の型を徹底解説|string・number・booleanから理解する
TypeScriptの基本の型(string・number・boolean・arrayなど)を初心者向けにわかりやすく解説。型の書き方や役割を理解し、TypeScriptの基礎をしっかり身につけましょう。
全8回シリーズ — 目次
1 TypeScriptとは
2 環境構築
3 基本の型
4 関数と型
5 インターフェイス
6 クラス
7 実践的な型
8 便利機能まとめ
🎯 この記事のゴール
TypeScriptの基本的な型を一通り書けるようになること。「型を書く意味」を体で覚えるため、コードを実際に動かしながら読み進めてください。 まず実行ファイルを用意しよう
第2回で作ったプロジェクトに、今回用のファイルを追加します。Bunの場合はtypes.ts 、Node.jsの場合はsrc/types.ts を作成してください。
Bunの場合
touch types.ts
bun --watch run types.ts Node.js + npm の場合
touch src/types.ts
npx tsc --watch # 別ターミナルで起動
node dist/types.js プリミティブ型:string / number / boolean
TypeScriptで最もよく使う3つの基本型です。変数や関数の引数に: 型名 と書くだけで型注釈を付けられます。
string
"hello" / 'world' / `template`
文字列。テンプレートリテラルも含む。
number
42 / 3.14 / -1 / NaN
整数・小数どちらも同じ型。intとfloatの区別はない。
boolean
true / false
真偽値。条件分岐によく登場する。
// string
const name: string = "Alice";
const greeting: string = `こんにちは、${name}さん`;
// number
const age: number = 28;
const pi: number = 3.14;
// boolean
const isLoggedIn: boolean = true;
console.log(greeting); // → こんにちは、Aliceさん
console.log(age, pi); // → 28 3.14
console.log(isLoggedIn); // → true
// 型が合わなければコンパイルエラー
const score: number = "100"; // エラー: string は number に代入不可 Bunで実行
bun run types.ts
#こんにちは、Aliceさん
#28 3.14
#true Node.js + npm で実行
npx tsc && node dist/types.js
#こんにちは、Aliceさん
#28 3.14
#true 配列型:array
配列の型は「要素の型 +[] 」で表現します。書き方は2通りありますが、意味は同じです。
// 書き方① 型[](よく使う)
const fruits: string[] = ["apple", "banana", "cherry"];
const scores: number[] = [80, 95, 72];
// 書き方② Array<型>(ジェネリクス記法)
const colors: Array<string> = ["red", "blue"];
fruits.push("grape"); // OK
fruits.push(42); // エラー: number は string[] に追加不可
console.log(fruits);
console.log(scores[0]);
console.log(colors); Bunで実行
bun run types.ts
# [ "apple", "banana", "cherry", "grape" ]
# 80
# [ "red", "blue" ] Node.js + npm で実行
npx tsc && node dist/types.js
# [ 'apple', 'banana', 'cherry', 'grape' ]
# 80
# [ 'red', 'blue' ] オブジェクト型:object
オブジェクトは{ プロパティ名: 型 } の形で型を定義します。? を付けると省略可能なプロパティになります。
const user: { name: string; age: number; isAdmin: boolean } = {
name: "Bob",
age: 32,
isAdmin: false,
};
console.log(user.name); // → Bob
console.log(user.age); // → 32
console.log(user.email); // エラー: 'email' は型に存在しない
// オプショナルプロパティ(? をつけると省略可能)
const product: { title: string; price: number; description?: string } = {
title: "TypeScript本",
price: 2800,
};
console.log(product.description); // → undefined Bunで実行
bun run types.ts
# Bob
# 32
# undefined Node.js + npmで実行
npx tsc && node dist/types.js
# Bob
# 32
# undefined🔍 先取りポイント
オブジェクトの型をインラインで毎回書くのは冗長です。第5回で学ぶinterface やtype を使うと型に名前をつけて再利用できます。 any と unknown — 使い分けが重要
型が確定できない場面に出てくる2つの型です。見た目は似ていますが安全性がまったく異なります。
any — 危険
型チェックを 完全に無効化 する。TypeScriptの恩恵がゼロになるため、原則として使わない。
unknown — 安全
「型が不明」を型で表現する。使う前に 型ガードが必須 になるため、安全に扱える。
// any の問題点
let value: any = "hello";
value = 42;
value = true;
// コンパイルは通るが実行時エラーになる可能性がある
console.log(value.toFixed(2));
console.log(value.nonExistent);// unknown の安全な使い方
let value: unknown = "hello";
console.log(value.toUpperCase()); // エラー: unknown 型には直接アクセス不可
// typeof で型を絞り込んでから使う(型ガード)
if (typeof value === "string") {
console.log(value.toUpperCase()); // → HELLO
} Bunで実行
bun run types.ts
# HELLO Node.js + npm で実行
npx tsc && node dist/types.js
# HELLO✨ 実務のルール
any は「TypeScriptをJavaScriptに戻す」のと同じです。型が不明な場面ではunknown を使い、必ず型ガードを挟む習慣をつけましょう。 void と never — 関数の戻り値に使う型
| 型 | 意味 | 主な用途 |
|---|---|---|
| void | 値を返さない(undefinedを返す) | 副作用だけの関数(ログ出力、状態更新など) |
| never | 絶対に値が返らない | 必ず例外を投げる関数、無限ループ |
// void と never の例
// void: 値を返さない関数
function logMessage(msg: string): void {
console.log(`[LOG] ${msg}`);
}
logMessage("起動しました"); // → [LOG] 起動しました
// never: 絶対に戻ってこない関数
function throwError(message: string): never {
throw new Error(message);
}
type Status = "active" | "inactive";
function checkStatus(status: Status): string {
if (status === "active") return "有効";
if (status === "inactive") return "無効";
return throwError("到達不能なコード");
}
console.log(checkStatus("active")); // → 有効 Bunで実行
bun run types.ts
# [LOG] 起動しました
# 有効 Node.js + npm で実行
npx tsc && node dist/types.js
# [LOG] 起動しました
# 有効 型注釈の書き方パターンまとめ
# 型注釈パターン集
/ ① 変数
const title: string = "TypeScript入門";
let count: number = 0;
// ② 関数の引数と戻り値
function multiply(a: number, b: number): number {
return a * b;
}
// ③ アロー関数
const double = (n: number): number => n * 2;
// ④ 配列
const ids: number[] = [1, 2, 3];
// ⑤ オブジェクト
const config: { debug: boolean; version: string } = {
debug: false,
version: "1.0.0",
};
// ⑥ 型推論(型を書かなくても自動で推論)
const inferred = "TypeScript"; // 自動で string 型
const num = 42; // 自動で number 型
console.log(multiply(4, 5)); // → 20
console.log(double(7)); // → 14 Bunで実行
bun run types.ts
# 20
# 14 Node.js + npm で実行
npx tsc && node dist/types.js
# 20
# 14💡 型推論について
値から型が明らかな場合、TypeScriptは自動で型を推論します。すべてに型注釈を書く必要はなく、 「読む人に型が伝わるか」を基準に使い分ける のが実務での正解です。📌 第3回のまとめ
string /number /boolean の3大プリミティブ、配列・オブジェクトの型注釈、any vsunknown 、void /never を学びました。 anyを避けてunknownを使う のが実務の第一歩。次回は関数の型定義を深掘りします。📝 ▶ 次のステップ
次は「 」を解説します