TypeScript
#プログラミング言語 #AltJS
https://scrapbox.io/files/61620183145aff001e7a08da.png
主な処理系:
tsc (型チェッカ+JavaScript トランスパイラ)
Deno (tsc を内蔵, 型チェック+直接実行, REPL)
ts-node (tsc に依存, 型チェック+直接実行, REPL)
swc (JavaScript トランスパイラ, Rust 製)
Babel (JavaScript トランスパイラ)
AltJS の静的型付けプログラミング言語
Microsoft 製
JavaScript に型をつけたスーパーセット
型以外の機能がほとんど全く入らない
Visual Studio Code との相性が最高
TypeScript があるとめちゃくちゃ補完が強くなる
いかれた型がたくさんある
Union Types number | string | undefined
漸進的型付け言語だから仕方がない
Intersection Types { foo: number } & { bar: string }
オブジェクト型のマージに必要になるから仕方がない
Literal Types 3 "Hello"
stream.on("data", handler) みたいな感じでenumっぽく使われるから仕方がない
Tuple Types [number, string, undefined]
実態は配列なのだが、React とかがタプルの代わりとして使いまくるもんだから仕方がない
可変長タプル [string, ...number[]] [string, ...object[], boolean]
可変長部分と固定部分が混ざってることがあるから仕方がない
配列型を引数に展開 (...args: [number, string]) => {}
可変長引数 が配列で表現されているんだから仕方がない
Mapped Types {[P in keyof K]: T[P]}
オブジェクト型から特定のキーを抜き出したりすることが必要になるから仕方がない
Conditional Types T extends Promise<infer R> ? R : never
オブジェクトやUnionを条件で絞り込みたくなることもあるから仕方がない
Union Distribution T extends null | undefined ? never : T
Unionの絞り込みに便利(とは思うが、)だから仕方がない(と言ってこんなわけのわからん仕様を盛り込んでよかったのか?)
Template String Types \`${number}meters\`
特定のパターンに沿った文字列を受け取ったり文字列の結合がしたくなることもあるから仕方がない
再帰と条件分岐が可能なので チューリング完全
再帰と条件分岐がある=>チューリング完全なのかは自信がない
型レベルで文字列をパースするなどが書ける