結論: T.bind, T.cast, .rbi
Rubyの言語仕様やSorbetの仕様、Sorbetのエコシステムの現状により、日々上記メソッドや機能に頼りながらSorbetを使用しているのでここに記しておきます(T.bindとT.castは元をたどるとT.letなのでそもそも3つもないとも言えますが…)。
T.bind
T.bindについては、[Sorbet] selfが迷子の時はT.bind で書いた通り、selfが判別できないいくつかのパターン(自分は主にmoduleとlambda)で使用します。詳細はリンク先に書いている通りなので使い方だけ書いておきます。
|
|
T.cast
自分はRailsのControllerのparamsメソッドでよく使用しています。paramsの型定義をちゃんとしておけばT.letでもいけると思いますが面倒なのでT.castで済ませています。
下記のように使用しています。
|
|
T.castはTypeScriptのasと同等です。
.rbi
これはメソッドではなくrbiファイルの話ですがrbi上で定義することで実装ファイルを変更することなく型定義を行うことができます(思想的にはrbsと同じように外部ファイルとして型を定義するだけという認識)。
あるAクラスに動的にhogeメソッドが追加されている場合には下記のようにrbiファイルに書き足すことで型として参照することができるようになります(良くも悪くもhogeメソッドが本当にあるかは別として)
|
|
ちゃんと調べてないのでもしかしたらsorbet-railsのようなgemで自分が想定している使用範囲でも型を生成することができるかもしれませんが、自分はとりあえずkaminariのpageメソッドなどを追加したり、実装としては存在しているけどsorbet-typed上には存在していないメソッドを追加するなどして使用しています。