Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
TypeScript初心者向け完全ガイド
Search
MIKIO KUBO
November 12, 2025
Education
1
94
TypeScript初心者向け完全ガイド
# TypeScript初心者向け完全ガイド
## JavaScriptのスーパーセットから
## モダン開発の標準へ
MIKIO KUBO
November 12, 2025
Tweet
Share
More Decks by MIKIO KUBO
See All by MIKIO KUBO
The Fusion of Mathematical Optimization and AI (MOAI): History and Outlook (Final Version)
mickey_kubo
0
30
The Fusion of Mathematical Optimization and AI (MOAI): History and Outlook (Short Version)
mickey_kubo
1
34
The Fusion of Mathematical Optimization and AI (MOAI): History and Outlook
mickey_kubo
1
69
History and Future of MO+AI
mickey_kubo
1
62
History and Future of MO+AI (Fusion of Mathematical Optimization and Artificial Intelligence)
mickey_kubo
1
26
Next.js 入門解説: Reactとの決定的な違いとApp Routerに基づくモダンWeb開発
mickey_kubo
1
95
Google Antigravity and Vibe Coding: Agentic Development Guide
mickey_kubo
3
280
React完全入門
mickey_kubo
1
92
ポストSaaS時代:コンポーザブル、エージェント 型、成果指向ソフトウェアへの移行を読み解く
mickey_kubo
1
88
Other Decks in Education
See All in Education
IKIGAI World Fes:program
tsutsumi
1
2.6k
Semantic Web and Web 3.0 - Lecture 9 - Web Technologies (1019888BNR)
signer
PRO
2
3.1k
いわゆる「ふつう」のキャリアを歩んだ人の割合(若者向け)
hysmrk
0
290
10分で学ぶ すてきなモナド
soukouki
1
130
学習指導要領と解説に基づく学習内容の構造化の試み / Course of study Commentary LOD JAET 2025
masao
0
110
都市の形成要因と 「都市の余白」のあり方
sakamon
0
100
滑空スポーツ講習会2025(実技講習)EMFT学科講習資料/JSA EMFT 2025
jsaseminar
0
160
Web Search and SEO - Lecture 10 - Web Technologies (1019888BNR)
signer
PRO
2
3k
JavaScript - Lecture 6 - Web Technologies (1019888BNR)
signer
PRO
0
3.1k
Microsoft Office 365
matleenalaakso
0
2k
【洋書和訳:さよならを待つふたりのために】第1章 出会いとメタファー
yaginumatti
0
140
TeXで変える教育現場
doratex
0
7.8k
Featured
See All Featured
Building a Scalable Design System with Sketch
lauravandoore
463
34k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
690
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
40
HDC tutorial
michielstock
1
300
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
420
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
530
Discover your Explorer Soul
emna__ayadi
2
1k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
Faster Mobile Websites
deanohume
310
31k
The agentic SEO stack - context over prompts
schlessera
0
580
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.2k
What the history of the web can teach us about the future of AI
inesmontani
PRO
0
390
Transcript
TypeScript 初心者向け完全ガイド JavaScript のスーパーセットから モダン開発の標準へ
パート1 :TypeScript の「なぜ」を理解する
1. TypeScript とは? Microsoftが開発・提供するオープンソース言語 JavaScriptの**「スーパーセット(上位互換)」** 重要な原則: 有効なJavaScriptコードは、すべて有効なTypeScriptコード 既存のJSプロジェクトに段階的に導入可能 JSの広大なエコシステム(ライブラリ等)をそのまま使える
2. なぜTypeScript が生まれたか? JavaScript のスケーリング問題 元々JSは小規模なスクリプト用に設計された「動的型付け言語」 大規模・複雑なアプリ開発では、柔軟性が弱点になる (実行時エラー、保守性の低下) TypeScript の目的
JSに「静的型システム」を追加 大規模開発でも堅牢で保守性の高いコードを実現する
3. 動的型付け vs 静的型付け 動的型付け (JavaScript) 変数の型は、 実行時(ランタイム)にチェックされる let age
= 25; age = "twenty-five"; // JSではエラーにならない 柔軟だが、バグが実行されるまで潜在する 静的型付け (TypeScript) 変数の型は、 開発時(コンパイル時)にチェックされる let age: number = 25; age = "twenty-five"; // TSでは即エラー エラーを早期に発見し、コードの信頼性を高める
4. 静的型付けの絶大なメリット 1. バグの早期発見 タイプミス、関数への誤ったデータ渡し、 undefined エラーなど。 実行前にエディタがエラーを教えてくれる。 2. コードがドキュメントになる
型定義自体が「この変数や関数が何を意図しているか」を明確に示す。 3. 強力なエディタサポート (IntelliSense) VS Codeなどで、正確なコード補完やリファクタリングが可能になる。
5. トランスパイルとは? (.ts → .js) ブラウザやNode.js はTS コード(.ts) を直接実行できない トランスパイル
TSコード( .ts )を、ブラウザが理解できる標準的なJSコード( .js )に変換する プロセス tsc (TypeScript Compiler) というコマンドが実行する ポイント 型情報は、開発者を助けるために 開発時にのみ存在する 型情報は、トランスパイル後の .js ファイルからは 消去される
パート2 :TypeScript を実際に使ってみる
6. 開発環境のセットアップ 1. Node.js と npm のインストール npm (Node Package
Manager) を使ってTSをインストールするため Node.js公式サイトからLTS(推奨版)をインストール 2. TypeScript コンパイラ (tsc) のインストール プロジェクト毎(ローカル)にインストールするのが現代のベストプラクテ ィス npm install typescript --save-dev 3. コードエディタ:VS Code Visual Studio Code の使用を強く推奨 TSと同じMicrosoft製で、最高クラスのTSサポートが組み込まれている
7. Hello, TypeScript! ( 作成・実行) 1. プロジェクト初期化 npm init -y
2. TS インストール npm install typescript --save-dev 3. TS ファイル作成 ( index.ts ) const message: string = "Hello, TypeScript!"; console.log(message); 4. コンパイル (TS → JS) npx tsc index.ts → index.js ファイルが生成される 5. 実行 (JS ファイルを実行)
8. tsconfig.json 入門 TypeScript プロジェクトの「設定ファイル」 役割: i. そのディレクトリがTSプロジェクトのルートであることを示す ii. コンパイラオプション(ルール)を指定する
iii. コンパイル対象のファイルを指定する 生成方法: npx tsc --init コマンドで、デフォルト設定のファイルを自動生成できる
9. 必須 tsconfig.json オプション オプション 説明 一般的な値 target 生成するJSのバージョン "ES2020"
module モジュールシステム "CommonJS" rootDir TSソースファイルの場所 "./src" outDir JS出力先の場所 "./dist" strict 厳格な型チェックを有効化 true ( 強く推奨) esModuleInterop モジュール間の互換性を向上 true include コンパイル対象 ["src/**/*"]
パート3 :TypeScript の型システム
10. 基本の型 ( プリミティブ型) JavaScriptの基本データ型に対応する型が用意されています。 string : 文字列 (例: "Hello"
, 'world' ) number : 数値 (例: 42 , 3.14 ) boolean : 真偽値 (例: true , false ) null : 値が存在しないことを示す undefined : 値がまだ代入されていない bigint , symbol 構文: let 変数名: 型 = 値; let myName: string = "Alice"; let myAge: number = 30; let isLoggedIn: boolean = false;
11. データの構造化 ( 配列・オブジェクト) 配列 (Arrays) 書き方は2種類。前者が一般的。 let list: number[]
= [1, 2, 3]; let list: Array<number> = [1, 2, 3]; // ジェネリック構文 オブジェクト (Objects) インラインで「形」を定義できる let person: { name: string; age: number; } = { name: "Bob", age: 42 };
12. 型注釈 vs 型推論 型注釈 (Annotation) 開発者が「この変数はこの型です」と明示的に指定する方法 let message: string
= "This is a message"; 型推論 (Inference) TSが初期値から「この変数はこの型だろう」と自動で推論する機能 let message = "This is a message"; // messageはstring型と推論 ベストプラクティス 初期値から型が明らかな場合は「型推論」に任せ、コードを簡潔に保つ
13. カスタム型①:type エイリアス type キーワードで、型に「別名」を付ける機能 同じ「形」を何度も再利用できる オブジェクト、プリミティブ、ユニオン型など、 あらゆる型に使える // オブジェクトの型エイリアス
type Point = { x: number; y: number; }; let coordinates: Point = { x: 10, y: 20 }; // ユニオン型のエイリアス type UserID = string | number; let myId: UserID = "user-123";
14. カスタム型②:interface オブジェクトの「形」や「契約(contract)」を定義するもう一つの方法 主にオブジェクトの構造定義に特化している // Personという名前のインターフェースを定義 interface Person { name:
string; age: number; } // 定義したインターフェースを使用 let user: Person = { name: "Carol", age: 25 };
15. type vs interface ( 使い分け) これは初心者が最も混乱しやすい点の一つです。 interface を使う場面: **オブジェクトの「形」**を定義するとき
extends キーワードで型を「 継承(拡張)」したいとき type を使う場面: ユニオン型 ( string | number ) を定義するとき プリミティブ型 ( type Name = string; ) に別名を付けるとき 結論: プロジェクト内でルールを一貫させることが最も重要です。 迷ったら、オブジェクトには interface 、それ以外には type と覚えるのも良 いでしょう。
16. 関数の型付け ( 基本) 関数の**「入力(パラメータ)」 と「出力(戻り値)」**の型を定義 バグを防ぎ、関数の意図を明確にする // パラメータ a,
b は number型 // 戻り値も ( ): number 型と定義 function add(a: number, b: number): number { return a + b; } // 何も値を返さない場合、戻り値の型は `void` function logMessage(message: string): void { console.log(message); }
17. 関数の型付け ( 応用) オプショナルパラメータ ( ? ) パラメータ名の後に ?
を付けると、そのパラメータは省略可能になる function greet(name: string, greeting?: string) { // ... } greet("Alice"); // OK greet("Bob", "Good morning"); // OK デフォルトパラメータ パラメータに初期値を設定(型は自動で推論される) function greetWithDefault(name: string, greeting = "Hello") { // greeting は string型と推論される }
18. ユニオン型 (Union Type) | **「または」**を意味する型 ある変数が、複数の型のうちのいずれか一つであることを許容 パイプ記号 | を使って表現する
let id: string | number; id = 101; // OK id = "user-101"; // OK // id = true; // エラー: boolean型は許容されていない 異なる型の入力を受け付ける関数などで非常に便利
19. 型の絞り込み (Type Narrowing) ユニオン型の変数が「今、どの型であるか」を特定する処理 typeof 演算子を使った**型ガード (Type Guard)**が最も一般的 function
printId(id: string | number) { if (typeof id === "string") { // このifブロックの中では、TSは`id`がstring型だと知っている console.log(id.toUpperCase()); // 安全にstringのメソッドが使える } else { // このelseブロックの中では、TSは`id`がnumber型だと知っている console.log(id); } }
パート4 :よりスマートなコードを書く
20. ジェネリクス:問題提起 問題点: 型が違うだけで、ロジックが全く同じ関数を複数書く必要がある 例:「配列の最初の要素を返す」関数 function getFirstNumber(arr: number[]): number |
undefined { return arr[0]; } function getFirstString(arr: string[]): string | undefined { return arr[0]; } any 型を使えば一つにまとめられるが、 型安全性が失われ、TSのメリットがなく なる
21. ジェネリクス <T> :解決策 型を「 パラメータ(変数)」のように扱う仕組み T (Typeの略)という名前が慣習的に使われる 柔軟性(どんな型でも扱える)と 型安全性(型チェックが効く)を両立できる
// Tは「呼び出される時に決まる型」のためのプレースホルダー function getFirstElement<T>(arr: T[]): T | undefined { return arr[0]; } // 呼び出すと、T が number に決まる const numbers = [1, 2, 3]; const firstNum = getFirstElement(numbers); // firstNum は number型 // 呼び出すと、T が string に決まる const strings = ["a", "b", "c"]; const firstStr = getFirstElement(strings); // firstStr は string型
まとめ TypeScriptはJSの スーパーセットで、 静的型付けを提供する バグを**開発の早期段階(実行前)**に発見できる VS Codeとの連携で、**生産性(コード補完など)**が劇的に向上する type や interface
で、再利用可能な「型(形)」を定義できる Generics により、 型安全とコードの再利用性を両立できる
次のステップ エコシステムを探求する ここで学んだスキルは、React, Angular, Vue, Node.js (NestJS) など、あら ゆるモダンな開発で即戦力となります。 まず、小さなプロジェクトを始めてみましょう!
実際にコードを書き、エラーを解決する経験が、知識をスキルに変える最良 の方法です。 TypeScript の旅は始まったばかりです!