コンテンツにスキップ

rigor-typescript-utility-types

TypeScript標準のユーティリティ型の綴りを、Rigor独自のシェイプ投影型関数(shape-projection type function)へとマッピングします。これにより、TypeScript / Sorbet RBIから移行してくるコードベースが、RBS::Extendedアノテーションの中で馴染みのある名前を書けるようになります。ADR-13TypeNodeResolverを5つ登録します ── 純粋な変換レイヤーであり、シェイプ(shape)のセマンティクスはコアに存在し、そこではあらゆる利用者で共有される単一の仕様所有の定義を持ちます。

これはrigortypeにバンドルされて配布されます。plugins:の下で有効化します。

plugins:
- rigor-typescript-utility-types

完全なガイド。シェイプ投影そのもの ── 各々が何をするか、ロッシー投影(lossy-projection)ルール、TypeScript→Rigorの語彙表 ── は、ハンドブックの第4章 — タプルとハッシュシェイプの§「Deriving new shapes」とTypeScript付録でカバーされています。このページは運用上のクイックリファレンスです。

TypeScriptの綴りRigorコアの投影
Pick<T, K>pick_of[T, K]
Omit<T, K>omit_of[T, K]
Partial<T>partial_of[T]
Required<T>required_of[T]
Readonly<T>readonly_of[T]
class Address
# @rbs!
# %a{rigor:v1:return: Pick[Address::Shape, :name | :email]}
def public_fields; end
end

プラグインが有効になると、Pick[…]のヘッドは完全な解決パス(組み込み → プラグインチェーン → RBS Nominalフォールバック)を通じて解決されるため、サブ引数にはRigorの既存の型語彙のいずれを使ってもかまいません。

このプラグインに設定ノブはありません ── リゾルバチェーンはクラスロード時に登録されます。

  • マッピングされていないTS名はNominalに格下げされますParameters<F>ReturnType<F>InstanceType<C>Awaited<P>、文字列ケーシングユーティリティ(Uppercase/Lowercase/…)、ThisParameterTypeNoInferはマッピングされていません ── これらにはまだRigorの対応物がない(あるいは未着手のコア演算子を必要とする)ため、Nominal[Name, […]]として解決されます。
  • 非シェイプキャリアでロッシーになります。(HashShape / Tupleではなく)裸のNominal[Hash, [K, V]]に投影を適用すると、入力をそのまま返し、呼び出し箇所を監査できるようdynamic.shape.lossy-projection:info diagnosticを記録します。

5つのリゾルバクラス、再帰的な解決メカニズム、ADR-13のTypeNodeResolver契約(contract)については、プラグインのREADMEにあります。プラグインの書き方についてはexamples/rigor-plugin-authorスキルを参照してください。

© 2026 TypedDuck. Licensed under CC BY-SA 4.0.