diff --git a/docs/reference/advanced-topics/mental-model-of-types.md b/docs/reference/advanced-topics/mental-model-of-types.md index 3afb769b..f7c5b128 100644 --- a/docs/reference/advanced-topics/mental-model-of-types.md +++ b/docs/reference/advanced-topics/mental-model-of-types.md @@ -24,4 +24,21 @@ sidebar_label: 型のメンタルモデル 本章では、このような集合論的な見方に立って型を考えることで、型の振る舞いについての自然な推論を行えるようなメンタルモデルを構築します。 -型理論は非常に奥深く難解でもあるため、とっつきにくい分野に思えますが、比較的簡単に理解できて実用的にも役立つ概念も非常に多くあります。このドキュメントではそういった知識から TypeScript の型の世界観、いわばメンタルモデルを構築するための知識を紹介します。 +## Unit Type + +ここからは、TypeScript において型は値の集合として扱えることができることを具体例を交えて説明していきます。 + +まずは単に型は値の集合であると考えてください。たとえば、`number` 型という数値を表す型ですが、この型が集合であるとするとその要素は具体的な `number` 型の値である数値です。たとえば `1` や `3.14` などの数値がこの集合の要素となります。次の章で述べたように `number` 型で表現可能な範囲は有限であり、それらの範囲の要素に `NaN` と `Infinity` などの特殊な定数を加えた集合が `number` 型の集合ということになります。 + +[number型の表現範囲](reference/values-types-variables/number) + +さて、重要な型の概念として、型理論では Unit 型と呼ばれる型があります。Unit 型とはそのまま単位(unit)的な型であり、値をひとつしか持たないような型です。思い出してほしいのは、TypeScriptには[リテラル型](/values-types-variables/literal-types)という型がありました。TypeScript における Unit 型はこのリテラル型が相当します。 + +```ts twoslash +type One = 1; +const one: One = 1; +``` + +リテラル型は値リテラルをそのまま型として表現できる型であり、`number` や `string` などのプリミティブ型にはそれぞれ具体的な値のリテラルによって作成されるリテラル型が存在します。 + +型は値の集合でしたが、具体的な値はこのようにリテラルで表現でき、さらにそのリテラルを使ったリテラル型と一対一で対応します。