Python・JavaScript・TypeScript の違いについてまとめてみた
はじめに
約 3 ヶ月の外部研修を終え、自身の学習状況を振り返ったときに、アプリを作る大まかな流れはわかってきたが、まだ一から自分ひとりで作るのは難しいと感じ、簡単なアプリを復習として作ってみようと考えました。
そのとき、先輩社員の方から TypeScript での実装を勧めていただいたのですが、外部研修の中で Python と JavaScript に触れたことがあるものの、TypeScript についての知識は一切なく、どのような言語なのかもわからなかったため、今回はアプリの実装を始める前に、Python・JavaScript・TypeScript の違いについてまとめます。
3 つの言語の関係性
まずはこの 3 つの言語が何をするためのものか簡単にまとめます。
Python:Web、データ分析、AI・機械学習など幅広い分野で使われる汎用言語。
文法がシンプルで読みやすいと言われる。
JavaScript:Web ブラウザ上で Web ページに動きをつけるためによく使われる言語。
また、Node.js などのブラウザ以外の実行環境でも使われる。
TypeScript:JavaScript に静的な型チェックの仕組みを追加した言語。
通常は tsc などで JavaScript に変換してから実行する。
(なお、Node.js では v22.18.0 / v23.6.0 以降、型注釈の除去による一部の TypeScript ファイルの実行がデフォルトで有効になっている。
また、この型注釈の除去機能は v25.2.0 / v24.12.0 で安定版になっている。
ただし、これは型チェックを行う機能ではなく、Node.js が実行できるのは削除可能な TypeScript 構文に限られる。
Node.js は tsconfig.json も読み込まないため、tsconfig.json を考慮した完全な TypeScript サポートが必要な場合は、tsx などのサードパーティツールを利用する。)
以上から、TypeScript は JavaScript の構文や実行時の仕組みをベースに、コンパイル時の型チェックを追加した言語、というイメージに近いと感じました。
型とは
そもそも「型」というものが何なのかについてもまとめてみました。
プログラムのエラーには、実行してみるまで気づけないものと、実行する前に気づけるものがあります。
プログラムを実行せずにエラーを見つけることは「静的チェック」と呼ばれていて、その中でも「この値はどんな種類のものか」に基づいてエラーかどうかを判断する仕組みのことを「静的型チェック」と呼びます。
TypeScript は、コードを実行する前に、値の種類(文字列なのか、数値なのか、など)を手がかりにエラーを検出する静的型チェックの仕組みを持っています。
型とは、値や式がどのように扱えるかを表す情報です。
TypeScript では型を明示的に書くこともできますが、代入された値から型が推論される場合もあります。
数値を入れるつもりの変数に、うっかり文字列を入れてしまった、といったミスを、プログラムを動かす前の段階で教えてくれる仕組みが型チェックということになります。
もう少し踏み込んだ捉え方として、型を「共通の性質を持つ値の集まり(集合)」として考えると理解しやすいです。
例えば「数値の集合」「文字列の集合」というものがあり、ある値がどの集合に属しているかを確認する作業が型チェック、というイメージです。
ただし、TypeScript の型チェックはあくまで実行前の静的なチェックであり、実行時の値を自動的に検証してくれるものではありません。
TypeScript の型情報はコンパイル後の JavaScript には基本的に残らないため、API レスポンス、ユーザー入力、JSON.parse() の結果など、外部から入ってくるデータについては、必要に応じて別途バリデーション処理を実装する必要があります。
この考え方に立つと、ひとつの値が同時に複数の集合(型)に属することもある、というのも自然に理解できます。
一方で Python や JavaScript にも型そのものは存在しています(数値型、文字列型など)。
Python や JavaScript は動的型付けの言語です。
実行前の静的型チェックは必須ではなく、値の型は実行時に存在し、操作が行われるタイミングで型に関するチェックが行われます。
つまり、Python や JavaScript にも型の概念自体はありますが、TypeScript は言語として静的型チェックの仕組みを提供している点が大きな違いです。
一方で、Python では型ヒントや mypy など、JavaScript では JSDoc や TypeScript の checkJs などを使うことで、静的なチェックを取り入れることもできます。
表で比較
| 項目 | Python | JavaScript | TypeScript |
|---|---|---|---|
| 型のチェック | 動的型付け。実行時に値に対して型に関するチェックが行われる | 動的型付け。変数宣言時の型指定は不要で、実行時に値の型に応じて処理される | 静的型チェック。JavaScript の実行時挙動は基本的に変えず、コンパイル時に型に基づくエラーを検出する |
| 実行方法 | インタプリタが直接実行 | ブラウザ / Node.js が直接実行 | JavaScript に変換してから実行(Node.js の type stripping を使う場合は、一部の TypeScript 構文を型チェックなしで除去して実行可能) |
| 主な用途 | データ分析、AI・機械学習、Web、自動化 | Web のフロントエンド、Node.js でのバックエンド | 大規模なフロントエンド/バックエンド開発 |
| 学習のしやすさ | 文法がシンプルで初心者に優しい | 非同期処理などにやや癖がある | JavaScript が分かれば段階的に学べる |
| エラーの見つかりやすさ | 実行するまで気づきにくい。ただし、型ヒントや mypy などを使うことで静的型チェックも可能 | 実行するまで気づきにくい。ただし、JSDoc や TypeScript の checkJs などを使うことで、JavaScript ファイルに対しても静的なチェックを行える場合がある |
※1 コンパイル時やエディタ上で型エラーに気づきやすい |
| 主なフレームワーク / ライブラリ | Django、Flask、FastAPI など | React、Vue、Express、Next.js など | React、Vue、Express、Next.js、NestJS など |
※1 TypeScript は型エラーを検出して表示してくれますが、デフォルトの設定ではそのエラーが JavaScript ファイルの出力を止めるわけではありません。
実務ではエラーが残った状態のコードが本番にデプロイされてしまわないよう、CI やビルドの段階で tsc --noEmit (型チェックだけ実行してファイルは出力しない)を使ったり、noEmitOnError(型エラーがある場合は出力自体を止める設定、デフォルトはfalse)を有効にしたりして、エラーがある状態でリリースされないようにする工夫が必要になります。
こうして並べてみると、TypeScript は、JavaScript の実行時の仕組みを基本的にそのまま使いながら、コンパイル時の型チェックによってバグを見つけやすくする言語だと感じました。
実際に試してみた
JavaScript では最初に型の指定をしていないため、最初に数値を代入した変数に、後から文字列を再代入することもできます。

一方 TypeScript では、let age = 25; のように書くと age は number と推論されるため、その後 age = "25歳"; のように文字列を代入しようとすると型エラーになります。
ただし、any 型やユニオン型(例: number | string)を使うことで、複数の型の値を受け入れられるように設計することもできます。

このように TypeScript は、型を活用することでコードの意図を明確にし、実行前にバグの可能性に気づきやすくする、という発想に近いと感じました。
Python や JavaScript は動的型付けの言語であるため、標準的な実行時の挙動としては、型に関する問題に実行時まで気づきにくいことがあります。
ただし、Python の型ヒントや mypy、JavaScript の JSDoc / checkJs などを使うことで、実行前に一部の問題を検出することもできます。
一方 TypeScript は、エディタや TypeScript の言語サーバーが適切に設定されていれば、コードを書いている最中に型エラーを表示してくれます。
初学者で自分でミスに気づきにくい私にとって「実行前に間違いに気づける」というのはかなり心強い仕組みだと感じました。
まとめ
TypeScript は「新しい言語」というより「JavaScript に型チェックという補助機能が加わったもの」という感覚に近かったです。
TypeScript とは以下のようなものです。
- JavaScript をベースに、静的型チェックの仕組みを追加した言語
- 型を使って、値や式をどのように扱えるかを実行前にチェックできる
- 文法の基本は JavaScript とほぼ同じ
- 型を明示的に書く場面では、最初は書く量が増えて面倒に感じることもある
- ただしその分、後からのバグや修正がしやすくなる
Python や JavaScript にも型という概念自体はありますが、TypeScript は言語として静的型チェックの仕組みを提供している点が大きな違いだと感じました。
一方で、Python では型ヒントや mypy、JavaScript では JSDoc や TypeScript の checkJs などを使うことで、実行前に一部の問題を検出することもできます。
今後は実際に簡単なアプリ制作で手を動かしながら、理解を深めていきたいです。
参考資料
- TypeScript Handbook - TypeScript for JavaScript Programmers
- TypeScript Handbook - TypeScript for the New Programmer
- TypeScript Handbook - Everyday Types
- TypeScript Handbook - TypeScript for Java/C# Programmers
- MDN Web Docs - JavaScript ガイド
- Python公式ドキュメント - チュートリアル
- Python公式ドキュメント - Built-in Types
- Python公式ドキュメント - General Python FAQ
- Python公式 typing仕様書 - Type system concepts
- Python.org - What is Python? Executive Summary
- Python.org - Applications for Python
クラスメソッドオペレーションズ株式会社について
クラスメソッドグループのオペレーション企業です。
運用・保守開発・サポート・情シス・バックオフィスの専門チームが、IT・AIをフル活用した「しくみ」を通じて、お客様の業務代行から課題解決や高付加価値サービスまでを提供するエキスパート集団です。
当社は様々な職種でメンバーを募集しています。
「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、クラスメソッドオペレーションズ株式会社 コーポレートサイトをぜひご覧ください。
※2026年1月 アノテーション㈱から社名変更しました。



