個人的には、私はおそらくこれを特殊文字列をラップするScalaの複数の強く型付けされた関数としてラップしています。
たとえば、Querkiのために作成したManifest facadeを参照してください。それは文字通りの呼び出しを記述する内部ファサードを持っています:
@js.native
trait ManifestFacade extends js.Object {
@JSName("manifest")
def manifestInternal(cmd:String, params:js.Any*):Any = js.native
}
これはアプリケーションの使用を意図したものではありません。
class ManifestCommands(manifest:ManifestFacade) {
def manifestList():dom.Element = manifest.manifestInternal("list").asInstanceOf[dom.Element]
def manifestGetOptions():js.Dictionary[js.Any] = manifest.manifestInternal("option").asInstanceOf[js.Dictionary[js.Any]]
def manifestGetOption(name:String):Any = manifest.manifestInternal("option", name)
}
ManifestFacade
からManifestCommands
への暗黙的な変換がある。その代わりに、例えば、より正確な関数とそのラッパー層が存在します。 (これは古いコードですが、最近では暗黙のクラスとしてManifestCommands
を暗黙のクラスとして記述しています)。
これは少し前の作業ですが、アプリケーションコードが心配することなく素敵で強く型付けされたレベルで動作することを可能にしますさまざまなコマンドが実際にボンネットの下で荒々しい多形関数を呼び出す方法です。
ああ、私はあなたのファサードの別のものでこれを見て覚えています。あまりにも悪いことに、私は早くそれを選んでいませんでした。しかし、うん、これははるかに良いようです。まさに私が探していたもの。ありがとうございました –