要約すると、いくつかの基本プロパティを宣言するインターフェイスを持つことは可能ですが、追加のプロパティは制限しませんか?これは私の現在の状況です:他のプロパティを許可するTypeScriptインターフェイス
私は一般的なディスパッチャを定義する、Flux patternを使用しています:
class Dispatcher<TPayload> {
dispatch(arg:TPayload):void { }
}
私は、このように、私自身のペイロードタイプでディスパッチャを作成します。
interface ActionPayload {
actionType: string
}
const dispatcher = new Dispatcher<ActionPayload>();
私はいくつかの追加データでペイロードをディスパッチすべきいくつかのアクションコードを持っていますが、ActionPayload
インターフェイスはactionType
しか許されません。換言すれば、このコード:someOtherData
はActionPayload
インターフェイスと一致しないため
interface SomePayload extends ActionPayload {
someOtherData: any
}
class SomeActions {
doSomething():void {
dispatcher.dispatch({
actionType: "hello",
someOtherData: {}
})
}
}
は、コンパイルエラーが発生します。問題は、多くの異なる「アクション」クラスが同じディスパッチャを再利用することです。したがって、someOtherData
ここではanotherKindOfData
のようになります。現時点では、これを調整するために私ができるのは、異なるアクションがディスパッチされるため、new Dispatcher<any>()
です。しかし、すべてのアクションはベースActionPayload
を共有していますので、new Dispatcher<extends ActionPayload>()
などのタイプを抑制できることを期待していました。それが可能なのでしょうか?
感謝を参照してください、これは良い情報です。それは私の過度に単純化されたタイトルに正確に答える...私の質問の詳細で拡張された ''を単にオブジェクトリテラルをキャストすることによって使用する方法があったことが判明しました。不器用な質問を申し訳ありません。タイトルとサマリーを修正しようとすると、「サブインターフェースを実装し、オブジェクト・リテラルとのスーパー・インターフェースを満足する方法」、あるいは答えを受け入れるだけですか? –
Aaron
どちらか他の人が私には問題ありません。タイトルを変更することはおそらく質問を反映することです。 – Sebastien