メインコンテンツまでスキップ

「typescript」タグのついた61記事

全てのタグを見る

Adapter — 構造的部分型が消す境界

TypeScript は構造的部分型なので、形が合っていれば明示的な implements なしにそのまま渡せます。それでも変換役を挟む必要が残るのはどこからかを見ます。

Composite — 再帰的な判別可能ユニオン

木構造を扱うとき、共通インターフェースを継承したクラス階層の代わりに、再帰的な判別可能ユニオンで表せます。ファイルシステムを題材にします。

Mapped TypesとConditional Types

この章では、TypeScriptの高度な型機能であるMapped Types(マップ型)とConditional Types(条件付き型)について学びます。これらを理解すると、独自のユーティリティ型を作成できるようになります。

React + TypeScript

この章では、ReactとTypeScriptを組み合わせた型安全なフロントエンド開発について学びます。

SOLID は 1 つの理論ではない — 5 原則の出自

SOLID の 5 原則は同時に生まれたものではありません。Martin が 2000 年に公開した原典を読むと、そこにあるのはクラス設計の 4 原則とパッケージ設計の 6 原則で、SRP は含まれていません。頭字語が何を隠したかを扱います。

SOLID 原則

オブジェクト指向設計の SOLID 5 原則 (単一責任 / 開放閉鎖 / リスコフ置換 / インターフェース分離 / 依存逆転) を TypeScript の実例で解説。各原則の Bad / Good 比較で理解を深める入門ガイド。

SOLID 原則の深掘り

SOLID 5 原則を「なぜ守るのか」「いつ破っていいのか」「どう誤用されるか」の 3 層で掘り下げる全 7 章の連載。各原則の原典にあたり、現在どう再評価されているかまで扱います。

State — 型で不正な遷移を潰す

状態ごとのクラスを作る代わりに、判別可能ユニオンで状態を表すと、その状態で呼べない操作を型で禁止できます。自動販売機を題材にします。

Strategy — 関数が第一級であること

振る舞いを差し替えるだけなら関数を渡せば済みます。それでもオブジェクトとして束ねたくなるのは、戦略が複数のメソッドや状態を持つときです。

Template Method — 継承とフックの注入

処理の骨組みを固定して一部だけ差し替える手段は、抽象クラスの継承だけではありません。フック関数を受け取る形との違いを整理します。

TypeScript ガイド

TypeScript を言語仕様から実践まで体系的に学ぶ全 21 章のガイド。入門・基本の型・関数・クラスと OOP・高度な型システム・ジェネリクス・開発環境・実践を段階的にカバー。

TypeScript デザインパターン

GoF の 23 パターンを現代の TypeScript で読み直す全 16 章のガイド。パターンごとに言語機能で代替できるかを判定し、クラスとして書き続ける価値が残る条件を並べて示します。

TypeScript 特有のベストプラクティス

TypeScript の型システムを効果的に活用するベストプラクティス。any 禁止 / unknown と never の使い分け / ジェネリクス / ユーティリティ型 / 型ガードによる絞り込みを Bad / Good 比較で解説。

Union型・リテラル型・enum

この章では、複数の型を組み合わせるUnion型、特定の値のみを許可するリテラル型、そして関連する定数をまとめるenumについて学びます。

Visitor — 網羅チェックが代わりになる

判別可能ユニオンと never を使った網羅チェックがあると、Visitor のクラス階層を組まなくても「処理し忘れ」を型で防げます。構文木を題材にします。

クラスとインターフェース

TypeScript のクラスとインターフェース設計。情報隠蔽 (カプセル化) / 単一責任 / クラスを小さく保つ / 継承よりコンポジションを優先する原則を Bad / Good 比較で解説。凝集度と結合度の考え方も含む。

クラスの基本

この章では、TypeScriptにおけるクラスの基本的な書き方を学びます。

クリーンコードガイド

TypeScript でクリーンで保守性の高いコードを書くための実践ガイド。なぜそのルールが重要か、どう適用するかを段階的に解説。型システムを活かす設計原則を 13 記事で体系化した道標。

コメント

TypeScript のコメント術。Why はコメント、What はコードという基本原則と、保守時に古いコメントが矛盾を生まないための回避パターン。JSDoc 活用や自己説明的なコードの書き方も解説。

ジェネリクスの制約

この章では、ジェネリクスに制約を設ける方法と、ジェネリッククラス・インターフェースについて学びます。

ジェネリクスの基礎

この章では、TypeScriptの代表的な機能の 1 つであるジェネリクス(Generics)について学びます。

まとめ

クリーンコードガイド (TypeScript) 全 11 記事の振り返り。命名・関数・型安全・オブジェクト指向・SOLID 原則の全体像を mindmap で可視化し、コーディング時のチェックリストとして使える総まとめ記事。

モジュールとtsconfig

この章では、TypeScriptのモジュールシステムとプロジェクト設定について学びます。

ユーティリティ型

この章では、TypeScriptに組み込まれているユーティリティ型(Utility Types)について学びます。

リスコフの置換原則 — 型が通っても契約は守られない

LSP は「派生型は基底型と置き換えられる」という原則ですが、置き換えられるかを判定する基準は契約にあります。原典が示した事前条件・事後条件・不変条件・履歴性質の 4 項目と、型検査がそのどこまでを見ているかを扱います。

依存性逆転の原則 — 抽象は誰のものか

DIP と DI と IoC は別の概念です。依存を外から渡すだけでは逆転は起きません。何が逆転するのか、抽象がどちらのモジュールに属するべきかを原典から確認します。

単一責任の原則 — 「変更の理由」とは誰のことか

SRP の「変更する理由は 1 つ」という定義は主観的で、読む人ごとに分割の粒度が変わります。Martin 自身が後に「この原則は人についてのものだ」と明示した意味と、分割しすぎたときに何を失うかを扱います。

原則の衝突と限界 — どちらを取るかを決める

5 原則は互いに引っ張り合います。分割を進めれば変更で触るファイルが増え、抽象を挟めば実体を追う手数が増えます。衝突したときの判断と、SOLID そのものへの現代的な批判を扱います。

命名規則 ① ケース規約と変数・定数

TypeScript の命名規則 第 1 部。ケバブ・スネーク・パスカル・キャメルの 4 つのケース規約の使い分けと、変数・真偽値・定数の命名を Bad / Good 比較で解説。「コードそのものがドキュメントになる」良い名前の付け方の入り口。

命名規則 ② 関数とクラス

TypeScript の命名規則 第 2 部。get / set / calculate などの動詞パターンによる関数の命名、真偽値を返す関数、クラス名のサフィックスパターン、メソッド名を冗長にしない基準を Bad / Good 比較で解説。

命名規則 ③ 命名の質を高める

TypeScript の命名規則 第 3 部。発音可能な名前・配列の複数形・同義語の統一・対比語・意味のない単語の回避・省略の基準といった命名の質を高める原則と、総合練習問題 + クイックリファレンスのまとめ。

型の絞り込み

この章では、TypeScriptの型システムの中核となる「型の絞り込み(Type Narrowing)」について学びます。

変数の定義

TypeScript の変数定義のベストプラクティス。マジックナンバー / マジックキャラクタの定数化、const / let の使い分け、スコープ最小化、複数意味を持たせない原則を Bad / Good 比較で解説。

条件分岐

TypeScript の条件分岐ベストプラクティス。早期リターンでネストを浅く保つ、Discriminated Union と網羅性チェック、ポリモーフィズムによる if 文削減を Bad / Good 比較で解説する整理術。

特殊な型

この章では、TypeScriptの特殊な型について学びます。

繰り返し処理

forEach / map / filter / reduce の使い分けと for...of / for...in の違い。高階関数で意図を明確にする配列処理のベストプラクティスを Bad / Good 比較で解説。

開放閉鎖の原則 — 予測が外れたときのコスト

OCP は拡張点をあらかじめ用意することを求めますが、拡張の方向を読み違えると間違った抽象が残ります。原典が何を実現手段としたかを確認し、YAGNI との衝突をどう判断するかを扱います。

関数の基本

この章では、TypeScriptにおける関数の基本的な書き方を学びます。

関数の定義

TypeScript の関数設計のベストプラクティス。単一責任 / 純粋関数 / 早期リターン / 引数最小化 / 副作用回避 / DRY 原則を Bad / Good 例で比較解説。型注釈で入出力を明確化する考え方も含む。

関数の応用

この章では、TypeScriptにおける関数のより高度な機能について学びます。

高度な型操作

この章では、TypeScriptの高度な型操作機能について学びます。これらを組み合わせることで、より型安全で表現力豊かなコードが書けるようになります。