संक्षेप में, क्या एक इंटरफ़ेस होना संभव है जो कुछ मूल गुणों की घोषणा करता है, लेकिन अतिरिक्त गुणों को प्रतिबंधित नहीं करता है?टाइपस्क्रिप्ट इंटरफ़ेस जो अन्य गुणों की अनुमति देता है
मैं Flux pattern है, जो एक सामान्य डिस्पैचर को परिभाषित करता है उपयोग कर रहा हूँ:
class Dispatcher<TPayload> {
dispatch(arg:TPayload):void { }
}
मैं तो अपने ही पेलोड प्रकार के साथ एक डिस्पैचर बनाने के लिए, इस तरह:
interface ActionPayload {
actionType: string
}
const dispatcher = new Dispatcher<ActionPayload>();
यह मेरा वर्तमान स्थिति है
अब मेरे पास कुछ एक्शन कोड है जो कुछ अतिरिक्त डेटा के साथ एक पेलोड भेजना चाहिए, लेकिन ActionPayload
इंटरफ़ेस केवल actionType
के लिए अनुमति देता है। दूसरे शब्दों में, इस कोड:
interface SomePayload extends ActionPayload {
someOtherData: any
}
class SomeActions {
doSomething():void {
dispatcher.dispatch({
actionType: "hello",
someOtherData: {}
})
}
}
एक संकलन त्रुटि क्योंकि someOtherData
ActionPayload
इंटरफ़ेस से मेल नहीं खाता देता है। मुद्दा यह है कि कई अलग-अलग "एक्शन" कक्षाएं उसी प्रेषक का पुन: उपयोग करेंगे, इसलिए यहां someOtherData
है, जबकि यह anotherKindOfData
हो सकता है, और इसी तरह। फिलहाल, मैं इसे समायोजित करने के लिए कर सकता हूं new Dispatcher<any>()
का उपयोग करें क्योंकि विभिन्न कार्यों को प्रेषित किया जाएगा। सभी क्रियाएं आधार ActionPayload
साझा करती हैं, हालांकि, मैं new Dispatcher<extends ActionPayload>()
या कुछ प्रकार जैसे प्रकार को बाधित करने में सक्षम होने की उम्मीद कर रहा था। क्या ऐसा कुछ संभव है?
धन्यवाद, यह अच्छा जानकारी है। यह मेरे अति-सरलीकृत शीर्षक का बिल्कुल जवाब देता है ... यह पता चला है कि ऑब्जेक्ट शाब्दिक कास्टिंग करके मेरे प्रश्न के विवरण में विस्तारित '' का उपयोग करने का एक तरीका था। बेकार सवाल के लिए खेद है। क्या मुझे शीर्षक और सारांश को ठीक करने का प्रयास करना चाहिए, पूर्व "एक सब-इंटरफ़ेस को कैसे कार्यान्वित करें और किसी ऑब्जेक्ट के साथ एक सुपर-इंटरफ़ेस को संतुष्ट करें", या बस अपना उत्तर स्वीकार करें? –
Aaron
एक या दूसरा मेरे साथ ठीक है। शीर्षक को बदलना संभवतः प्रश्नों को प्रतिबिंबित करना बेहतर है। – Sebastien