TSKaigi Kansai 2024
キーノート
計算理論
決定問題のみを考える
有限オートマトン
正規表現と等価
プッシュダウンオートマトン
チューリングマシン
TypeScriptの型システムの強さ
チューリングマシン
チューリングマシンを型システムで作る
型レベルSQL
Schemeのインタプリタ
なぜ型システムがチューリング完全になったのか
順次実行・繰り返し・条件分岐
再帰型・分岐
型レベル再帰の上限
Quineが構成可能であることの証明
停止性問題
対角線論法
スマートコントラクト
Vyper
意図してチューリング完全じゃなくしている
gas limit attack
型チェック 速度改善 奮闘記
モノレポ
27〜48%の速度改善を達成
要因
Redux Toolkit
Extract
不要なスキーマ定義・チェック
Redux Toolkit
initialStateの型を元に推論される部分
initialStateの型に名前を付けて切り出す
Naming Complex Typesパターン
Extract
関数オーバーロードでExtractを排除
typeが2種類しかないので汎用性を失うトレードオフを受け入れた
不要なzod schemaを介していた
型だけが欲しいのにzod schemaを通していた
ビルド済みのJSファイル
型チェックする必要がない
VSCode上でのチェックは毎回全部型チェックされる
トレース用のファイルを生成して解析ツールに投入する
tscコマンドで生成
プロジェクト全体のファイルが対象
VSCode上で生成
現在開いているファイルを起点にする
調査用ファイル
trace.json
こっちが重要
types.json
tscコマンド
--extendedDiagnotics
--generateTrace
VSCode
"typescript.tsserver.enableTracing": true
"typescript.tsserver.log": "verbose"
拡張機能がある
trace.jsonの解析
about://tracing
Prefetto UI
Speedscope
posとendが出るのでAST解析ツールを使って照合する
TypeScript Graph
コードの理解の壁
コードを読まずに構造を理解できる
型付き API リクエストを実現するいくつかの手法とその選択
zodスキーマの共有
Hono RPC
TypeScriptファーストな手法
柔軟性か安全さのどちらかが将来失われてしまう
OpenAPI
hono/zod-openapi
OpenAPIを書く用のDSL
TypeSpec
OpenAPIのバックエンドの乖離はテストケースを書いてがんばろう
Amplify Gen2 Deep Dive / バックエンドの型をいかにしてフロントエンドへ伝えるか
Amplify Gen2
Sandbox
開発者のマシンとAWSリソースを直接繋ぐ
deep diveしましょう
tslogで実現するセキュアなメタデータ管理とロギング
構造化ロギング
ログ出力時の型を定義し制御できないか
typia
ts-morphのパフォーマンス改善Tips
Compiler APIをラップする
抽象化のオーバーヘッド
構造体
バッチ処理
解析と操作を分離する
ASTのキャッシュが効くようになる
GraphQLのダイエット術:TypeScript Language Service Pluginで未使用フィールドをなくす
Full-Stack TypeScript開発で共通化すべき型とは
API通信のリクエスト・レスポンス
他の型は?
部分的に共有する
無理に型を共有する必要はない
npm publish --access=restricted
バリデーションライブラリから生成する
TypeScript、上達の瞬間
チートのような知識を手に入れて急に伸びた
型
再現性をもたらしたい
詳しい人に手取り足取り教えてもらった (完)
進化し続けている言語
言語仕様がまとまっていない
体系はないけど理論はある
愚者は経験に学び、賢者は歴史に学ぶ
MinCaml
Goでつくるインタプリタ
TaPL
ゼロから学ぶRust
型と値の違いを意識する
babel/plugin-transform-typescript
型の上下関係
構造的部分型
変性
判別共用体
tsconfig.jsonの設定が分からない
複雑な型は普段は使わなくてもいいが
型パズルが解けると出世できる??
勝ちパターン
型の世界に書いていたものはもはや普通のプログラム
自分でトップダウンな知識を手に入れに行く
型注釈を見つめる
手取り足取り教わるためには
よくできたテンプレート言語として TypeScript + JSX を利用する試み
テンプレート言語
IDEの支援が貧弱
言語自体を覚えないといけない
JSXをWebフロントエンド以外でも使う
React Email
そもそもJSXとは
糖衣構文
テンプレート言語としてのTypeScript + JSX
表現力が高すぎる?
トランスパイル先で使われる関数を差し替えられる
jsx-slack
JSX.IntrinsticElementsに独自要素を足す
JSで記述したテンプレートを他の言語から呼び出す
as(型アサーション)を書く前にできること
asの濫用
インターフェース境界でのas
型はドキュメント
アプリ文言のパースで学ぶ文字列Literal型パズル入門
文言の翻訳
infer + Template Literal Type + 再帰型
placeholderを再帰的に探す
初めてDefinitelyTypedにPRを出した話
encoding-japanese
ライブラリ本体を直したが型エラーが発生
DefinitelyTyped
pnpm workspaceになった
パッチバージョンがライブラリ本体と同期していない
2.2.9999
TypeScriptの次なる大進化なるか!? 条件型を返り値とする関数の型推論
TypeScript 5.8で入りそう
leftもrightもundefinedのときだけ返り値がundefinedであることを表現したい