मैं अपनी छोटी प्रतिक्रिया मूल परियोजना को शुद्ध जावास्क्रिप्ट से टाइपस्क्रिप्ट में माइग्रेट कर रहा हूं। जबकि यह अब तक ठीक चला, मुझे अब Redux की समस्या है।

मैं जिस रेड्यूसर से जूझ रहा हूं वह radioButtonSelectedReducer है। एप्लिकेशन में दो रेडियो बटन हैं। यदि पहला क्लिक किया जाता है, तो यह स्ट्रिंग "आइटमऑन" देता है और यदि दूसरा क्लिक किया जाता है, तो यह स्ट्रिंग "आइटम टू" देता है। इसलिए, radioButtonSelected स्ट्रिंग प्रकार का होना चाहिए, मैंने सोचा। लेकिन यह त्रुटि देता है: radioButtonSelected: string; -->

"The expected type comes from property 'radioButtonSelected' which is declared here on type 'ReducersMapObject<IApplicationState, AnyAction>'" 

मैं एक ऐसा टाइपस्क्रिप्ट नौसिखिया हूं और नहीं जानता कि इस संदेश का क्या करना है।

imports ...

export interface IApplicationState {
  radioButtonSelected: string;
  searchBarInput: string;
  searchBarResult: string;
}

const rootReducer = combineReducers<IApplicationState>({
  radioButtonSelected: radioButtonSelectedReducer,
  searchBarInput: searchBarInputReducer,
  searchBarResult: searchBarResultReducer,
});

export type RootState = ReturnType<typeof rootReducer>; 

जब मैं combineReducers() को <IApplicationState> के बिना छोड़ता हूं और RootState को mapStateToProps() में कॉल करता हूं, तो यह त्रुटि देता है:

  error TS2339: Property 'itemSelected' does not exist on type 'CombinedState<{ radioButtonSelected: { itemSele
cted: string; }; searchBarInput: { inputValue: any; }; searchBarResult: { returnValue: any; }; }>'.

रेडियो बटन को लागू करने वाले घटक से स्निपेट यहां दिया गया है:

...

function mapStateToProps(state: RootState) {
  return {
    itemSelected: state.itemSelected,
  };
}
2
RuntimeError 19 फरवरी 2020, 21:42

1 उत्तर

आपको IApplicationState घोषित करने या इसे combineReducers() के लिए सामान्य के रूप में पास करने की आवश्यकता नहीं है। वास्तव में, यह स्पष्ट रूप से type RootState = ReturnType<typeof rootReducer> की बात है। यह अनुमान लगाता है कि संयुक्त राज्य प्रकार क्या है, इसलिए आपको इसे घोषित करने या इसे अपडेट करने की आवश्यकता नहीं है।

अधिक विवरण के लिए कृपया "Usage with TypeScript" पर Redux डॉक्स पेज देखें। .

3
markerikson 19 फरवरी 2020, 21:51
आपके जवाब के लिए धन्यवाद। मैंने पहले रन में बिल्कुल यही कोशिश की, लेकिन जब मैं घटक में mapStateToProps को कॉल करता हूं, तो यह कहता है: त्रुटि TS2339: संपत्ति 'आइटम चयनित' प्रकार पर मौजूद नहीं है 'संयुक्त राज्य <{रेडियोबटन चयनित: {आइटम सेले सीटी: स्ट्रिंग; }; searchBarInput: {इनपुट वैल्यू: कोई भी; }; searchBarResult: {रिटर्नवैल्यू: कोई भी; }; }>'। मेरा प्रश्न अपडेट किया।
 – 
RuntimeError
19 फरवरी 2020, 22:00
1
ऐसा इसलिए है क्योंकि आप itemSelected नाम की फ़ील्ड को combineReducers पर पास नहीं कर रहे हैं। या तो एक और रेड्यूसर है जिसे आप रूट रेड्यूसर में जोड़ना भूल गए हैं, या आपने फ़ील्ड नामों को बेमेल कर दिया है (यानी, state.itemSelected वास्तव में state.radioButtonSelected होना चाहिए)।
 – 
markerikson
19 फरवरी 2020, 22:09