In sintesi, è possibile avere un'interfaccia che dichiari alcune proprietà di base, ma non limiti le proprietà aggiuntive? Questa è la mia situazione attuale:Interfaccia TypeScript che consente altre proprietà
Sto utilizzando il Flux pattern, che definisce un dispatcher generico:
class Dispatcher<TPayload> {
dispatch(arg:TPayload):void { }
}
Ho quindi creare un dispatcher con il mio tipo di payload, come questo:
interface ActionPayload {
actionType: string
}
const dispatcher = new Dispatcher<ActionPayload>();
Ora ho un codice di azione che dovrebbe inviare un carico utile con alcuni dati aggiuntivi, ma l'interfaccia ActionPayload
consente solo actionType
. In altre parole, questo codice:
interface SomePayload extends ActionPayload {
someOtherData: any
}
class SomeActions {
doSomething():void {
dispatcher.dispatch({
actionType: "hello",
someOtherData: {}
})
}
}
Dà una compilazione errore perché someOtherData
non corrisponde l'interfaccia ActionPayload
. Il problema è che molte diverse classi di "azione" riutilizzeranno lo stesso dispatcher, quindi mentre è qui potrebbe essere anotherKindOfData
laggiù, e così via. Al momento, tutto ciò che posso fare per accontentarlo è utilizzare new Dispatcher<any>()
perché verranno inviate diverse azioni. Tutte le azioni condividono una base ActionPayload
, quindi speravo di riuscire a limitare il tipo come new Dispatcher<extends ActionPayload>()
o qualcosa del genere. È possibile qualcosa del genere?
Grazie, questo è buono informazioni. Risponde esattamente al mio titolo troppo semplificato ... si scopre che c'era un modo per usare l'estensione '' nei dettagli della mia domanda semplicemente lanciando il letterale dell'oggetto. Ci scusiamo per la domanda maldestra. Dovrei provare a correggere il titolo e il sommario, ad esempio "Come implementare una sottointerfaccia e soddisfare una super-interfaccia con un oggetto letterale", o semplicemente accettare la risposta? –
Aaron
Uno o l'altro va bene con me. Cambiare il titolo è probabilmente meglio per riflettere le domande. – Sebastien