TypeScriptHandbook
TypeScriptHandbook
TypeScriptの公式サイトのドキュメント。Bookといいつつ本じゃない。
TypeScript: Handbook - The TypeScript Handbook
読んで思った事を適当に書く。
Everyday Types 2026-08-04 (火)
Optional Chainの他の言語との違い
Optionalの意味がnullでは無くで存在しない、なのがちょっと注意が必要。
function printName(obj: { first: string; last?: string }) {
// ...
}
とあった時、lastが無い場合がある、というのがオプショナルの意味になる。 無意識にlastがnullかどうか、的な意味に思ってしまうが、そもそもlastが存在するかしないかなのでだいぶ意味合いが違う。
この辺はJavaScriptのoptional chainの話なのでJavaScriptの方に書いておくが、メソッド呼び出しやインデクサなどにドットがついたりするのが一見すると意外性があるが良く考えるともっともだ。
Union型とnarrow
見た目はFSharpとかのDiscriminated Unionに似ているが、振る舞いとしてはgenericsのconstraintsが指定されたものに似ている。 共通のメソッドだけが呼べる、というような。
function getFirstThree(x: number[] | string) {
return x.slice(0, 3);
}
個々の型を取り出すのはnarrowingする、と書いてあって、以下みたいにisArrayとかでも出来るらしい。
function welcomePeople(x: string[] | string) {
if (Array.isArray(x)) {
// Here: 'x' is 'string[]'
console.log("Hello, " + x.join(" and "));
} else {
// Here: 'x' is 'string'
console.log("Welcome lone traveler " + x);
}
}
型検査器はどうやってisArrayのセマンティクスを知っているのだろう?特別扱いしているのかな?
TypeScript: TS Playground - An online editor for exploring TypeScript and JavaScript
少なくともMyIsArrayでくくるくらいでは動くようだ。でもreturn trueじゃ駄目なんだから伝播はするらしいな。
TypeScript for Functional Programmers の方に、built-in predicatesが載っていて、ここにArray.isArrayは特別扱いしているな。
Type Aliases
type文は型を定義しているのではなく、aliasなんだな。
type Point = {
x: number;
y: number;
};
これは、右辺だけで型になっていて、単にそれに名前がついているだけ。新しい型が出来る訳では無い。
structural typeと合わせると、typedefみたいに別の型にする事は出来ない、という事だな。
interface
typeと似ていて、ほとんど同じに使えるけれど、extendsしたりメソッド足したりが出来るのがinterfaceか。 メソッドを足していくのがdeclaration mergingと呼ぶらしい。C++のnamespaceとかこういう感じだよな。
集合論的に考えればtypeだけで全部済みそうな気もするが、 よりJavaとかのinterfaceっぽく差分だけで定義していけるのが便利なケースはあるかもしれない。
Basic Types 2026-08-04 (火)
lenientは寛大な、という意味らしい。lenient typeでanyとかの一番ゆるい型を指す。 inference takes the most lenient types は推論がany側になる事でゆるい型チェックを実現している事を指している模様。
strictnessのオプションなど、tsc周辺の話の基本的な事が結構はいっているセクション。
TypeScript for JavaScript Programmers 2026-08-04 (火)
TypeScript for JavaScript Programmers
これはハンドブックの一部じゃないかもしれないが、先に読んどけ、と言われたので読んでおく。 ちなみにJSの他にCSharpやFunctional Programmer向けのもあって、それぞれ特徴が良くでていて面白い。
Structural Typeは特徴的だな。