カテゴリ: TypeScript 更新日: 2025/12/25

TypeScriptとJavaScriptのクラス設計の違いを初心者向けに解説!

TypeScriptとJavaScriptでのクラス設計の差を比較
TypeScriptとJavaScriptでのクラス設計の差を比較

先生と生徒の会話形式で理解しよう

生徒

「先生、TypeScriptとJavaScriptって、クラスの作り方は同じですか?」

先生

「基本の構文は似ていますが、TypeScriptには型の仕組みがあるので、設計の考え方が少し違います。」

生徒

「型の仕組みがあると何が変わるんですか?」

先生

「TypeScriptでは、プロパティやメソッドの型を指定できるので、後で間違った値を代入してもエラーとして教えてくれるんです。」

生徒

「それは便利そうですね!具体的にはどう書くんですか?」

先生

「では、JavaScriptとTypeScriptのクラス設計の違いを順番に見ていきましょう!」

1. JavaScriptのクラス設計

1. JavaScriptのクラス設計
1. JavaScriptのクラス設計

JavaScriptのクラスは、ES6から導入された機能で、オブジェクト指向の基本を簡単に書けるようになっています。クラスを使うことで、オブジェクトの設計図を作ることができます。型の指定はありませんので、どんな値でもプロパティに代入できます。


class Person {
    constructor(name, age) {
        this.name = name;
        this.age = age;
    }

    greet() {
        console.log(`こんにちは、私の名前は${this.name}です。`);
    }
}

const taro = new Person("太郎", 20);
taro.greet();

こんにちは、私の名前は太郎です。

このようにJavaScriptでは、nameageに文字列や数値など自由に代入できます。しかし、間違った値を入れてもすぐにはエラーにならないため、意図しないバグが起こることがあります。

2. TypeScriptのクラス設計

2. TypeScriptのクラス設計
2. TypeScriptのクラス設計

TypeScriptでは、クラスのプロパティやメソッドに型注釈を付けることができます。型注釈とは、「このプロパティは文字列型ですよ」「この値は数値型ですよ」とプログラムに教えることです。これにより、間違った値を代入したときにコンパイル時にエラーを教えてくれます。


class PersonTS {
    name: string;
    age: number;

    constructor(name: string, age: number) {
        this.name = name;
        this.age = age;
    }

    greet(): void {
        console.log(`こんにちは、私の名前は${this.name}です。`);
    }
}

const hanako = new PersonTS("花子", 25);
hanako.greet();

こんにちは、私の名前は花子です。

この例では、nameを文字列、ageを数値と指定しています。そのため、もし間違ってhanako.age = "二十五"と書くと、TypeScriptのコンパイラがエラーとして教えてくれます。

3. アクセス修飾子による設計の違い

3. アクセス修飾子による設計の違い
3. アクセス修飾子による設計の違い

TypeScriptでは、publicprivateprotectedといったアクセス修飾子を使うことができます。アクセス修飾子は、「このプロパティやメソッドは外部から触っていいか」を決めるものです。JavaScriptには標準ではありません。


class PersonAccess {
    public name: string;
    private age: number;

    constructor(name: string, age: number) {
        this.name = name;
        this.age = age;
    }

    public greet(): void {
        console.log(`こんにちは、私の名前は${this.name}です。`);
    }

    private getAge(): number {
        return this.age;
    }
}

const ken = new PersonAccess("健", 30);
ken.greet();
// ken.getAge(); // エラー: privateメソッドにはアクセスできません

このように、TypeScriptではクラスの内部設計を安全に保つことができます。これにより、大規模なプログラムでもバグを防ぎやすくなります。

4. JavaScriptとの互換性

4. JavaScriptとの互換性
4. JavaScriptとの互換性

TypeScriptで書いたクラスは最終的にJavaScriptにコンパイルされます。そのため、TypeScriptで型を付けても、実行時には通常のJavaScriptとして動作します。つまり、TypeScriptは型安全性を開発時に提供し、JavaScriptは実行時に柔軟性を提供する、という違いがあります。

5. クラス設計での実務上のポイント

5. クラス設計での実務上のポイント
5. クラス設計での実務上のポイント
  • TypeScriptでは型注釈を活用することで、バグを事前に防ぎやすくなる
  • アクセス修飾子を使うことで、外部から触ってほしくない内部処理を隠すことができる
  • JavaScriptと同じ構文なので、TypeScriptを学ぶことでJavaScriptの理解も深まる
  • 型を付けることによって、エディタの補完機能やリファクタリングも安全に行える

これらを意識するだけで、初心者でも安全で理解しやすいクラス設計ができます。

6. 覚えておきたいポイント

6. 覚えておきたいポイント
6. 覚えておきたいポイント

・JavaScriptは柔軟だが型安全性はない
・TypeScriptは型注釈で安全にクラス設計できる
・アクセス修飾子で設計の意図を明確化できる
・TypeScriptで書いたコードは最終的にJavaScriptとして動作する

まとめ

まとめ
まとめ

TypeScriptとJavaScriptのクラス設計を総合的に振り返る

今回の記事では、TypeScriptとJavaScriptにおけるクラス設計の違いについて、初心者にも理解しやすいように段階的に解説してきました。JavaScriptのクラスは、シンプルで柔軟に書けることが大きな特徴です。プロパティやメソッドに厳密な制約がないため、思いついた構造をそのまま形にでき、学習初期や小規模なプログラムでは扱いやすい存在です。しかしその一方で、どのような値が入るのかが分かりにくく、後からコードを見直したときに意図が伝わりにくいという課題もあります。

TypeScriptのクラス設計では、この弱点を補うために型注釈という仕組みが用意されています。プロパティやコンストラクタの引数、メソッドの戻り値に型を指定することで、クラスがどのような役割を持っているのかが明確になります。これは単にエラーを防ぐためだけではなく、クラスそのものが設計書のような役割を果たすという点で非常に重要です。初心者にとっても「このクラスは何を扱うのか」を理解しやすくなり、学習の助けになります。

型とアクセス修飾子がもたらす安心感

TypeScriptならではの特徴として、アクセス修飾子の存在も挙げられます。public、private、protectedを使い分けることで、「外から触ってよいもの」と「クラス内部だけで使うもの」をはっきり分けることができます。これはクラス設計において非常に重要な考え方で、意図しない使われ方を防ぎ、プログラム全体の安全性を高めてくれます。

JavaScriptではこのような制御を意識しないまま開発が進みがちですが、TypeScriptでは自然と設計を考える習慣が身に付きます。結果として、規模が大きくなっても壊れにくく、保守しやすいコードを書くことができるようになります。クラス設計を学ぶ段階でTypeScriptに触れることは、将来の開発力を伸ばす上で大きな意味があります。

クラス設計の考え方を確認するサンプル

ここで、TypeScriptのクラス設計の考え方を整理できるシンプルなサンプルを見てみましょう。プロパティの型とアクセス修飾子を意識することで、クラスの役割が分かりやすくなります。


// TypeScriptでのシンプルなクラス設計例
class Product {
    public name: string;
    private price: number;

    constructor(name: string, price: number) {
        this.name = name;
        this.price = price;
    }

    public showInfo(): void {
        console.log(`${this.name}の価格は${this.price}円です`);
    }
}

const item = new Product("ノート", 300);
item.showInfo();

このように設計することで、外部からは必要な情報だけを扱い、内部のデータは安全に管理できます。クラス設計に型と制御を取り入れることが、TypeScriptの大きな強みです。

先生と生徒の振り返り会話

生徒「JavaScriptのクラスは自由だけど、TypeScriptの方が安心して書けそうだと感じました。」

先生「そうですね。TypeScriptは型やアクセス修飾子がある分、設計を考える力が自然と身に付きます。」

生徒「クラスが設計図みたいになるという話が、とても分かりやすかったです。」

先生「その感覚は大切ですよ。後から見返したときや、他の人が読むときにも助けになります。」

生徒「これからは、プロパティの型や公開範囲を意識してクラスを書いてみます。」

先生「ぜひ続けてください。TypeScriptでのクラス設計を身に付けると、JavaScriptの理解もより深まりますよ。」

カテゴリの一覧へ
新着記事
New1
TypeScript
TypeScriptでパスエイリアスを設定する方法!baseUrlとpathsでコードをスッキリ整理
New2
JavaScript
JavaScriptのfor文の書き方を初心者向けにやさしく解説
New3
JavaScript
JavaScriptの関数でよくあるエラーとその解決法まとめ
New4
JavaScript
JavaScriptのイベント処理でよくあるエラーとその対処法
人気記事
No.1
Java&Spring記事人気No1
JavaScript
JavaScriptのインストール方法まとめ!Windows・Mac・Linux別にステップ解説
No.2
Java&Spring記事人気No2
JavaScript
JavaScriptのマウスイベントの使い方(click, mouseoverなど)
No.3
Java&Spring記事人気No3
JavaScript
JavaScriptのtoStringとString関数の違いを初心者向けに解説
No.4
Java&Spring記事人気No4
JavaScript
JavaScriptの純粋関数(pure function)と副作用の違いを理解しよう
No.5
Java&Spring記事人気No5
JavaScript
JavaScriptプログラムの実行方法まとめ!ブラウザ・Node.js・コンソールの使い方
No.6
Java&Spring記事人気No6
JavaScript
JavaScriptで文字列をforループで1文字ずつ処理する方法!初心者向け解説
No.7
Java&Spring記事人気No7
TypeScript
TypeScript学習におすすめの無料教材・リファレンスサイト【初心者向け】
No.8
Java&Spring記事人気No8
TypeScript
TypeScriptの始め方:開発環境の構築手順【初心者向け】