"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > टीएस फ़ंक्शन ओवरलोडिंग - वास्तविक दुनिया का उदाहरण

टीएस फ़ंक्शन ओवरलोडिंग - वास्तविक दुनिया का उदाहरण

2024-08-15 को प्रकाशित
ब्राउज़ करें:640

आइए एक यथार्थवादी उदाहरण के साथ कम बार-बार होने वाली टाइपस्क्रिप्ट सुविधा - फ़ंक्शन ओवरलोडिंग के बारे में जानें।

पहचान

एक कस्टम हुक रखें

export function useUrlState(
  defaultState: T,
  searchParams?: object,
)

किसी क्षण मुझे इसमें और तर्क जोड़ने की आवश्यकता होगी, संभवतः भविष्य में और अधिक। यह याद रखना कठिन है कि Nth तर्क क्या है, और useUrlState(firstArg, null, null,fourArg) जैसे फ़ंक्शन को कॉल करना हास्यास्पद है। इस तरह किसी ऑब्जेक्ट के अंदर तर्क पारित करना बहुत आसान हो जाएगा:

export function useUrlState({
  defaultState,
  searchParams,
  replace
}: { defaultState: T, searchParams?: object, replace?: boolean })

मैं फ़ंक्शन को एक नए प्रारूप में परिवर्तित करूंगा और इसे मौजूदा कार्यान्वयन के साथ पिछड़ा संगत रखूंगा।

कार्यान्वयन

सबसे पहले, फ़ंक्शन कार्यान्वयन के ठीक ऊपर ओवरलोड हस्ताक्षर जोड़ने की आवश्यकता है। ओवरलोड हस्ताक्षर वे सभी संभावित तरीके हैं जिनसे किसी फ़ंक्शन को अलग-अलग तर्क के प्रकार और मात्रा के साथ कॉल किया जा सकता है।

/**
 * @deprecated Pass arguments in a object `useUrlState({ defaultState: form, searchParams })`
 *
 *  * Github {@link https://github.com/asmyshlyaev177/state-in-url/tree/main/packages/urlstate/next/useUrlState#api}
 */
export function useUrlState(defaultState: T, searchParams?: object): {
  state: DeepReadonly,
  updateState: (value: Partial>,
  updateUrl: (value?: Partial>) => void,
  getState: () => DeepReadonly
}
/**
 * NextJS hook. Returns `state`, `updateState`, and `updateUrl` functions
 *
 * @param {JSONCompatible} [defaultState] Fallback (default) values for state
 * @param {?SearchParams} [searchParams] searchParams from Next server component
 */
export function useUrlState({ defaultState, searchParams }: {
  defaultState: T, searchParams?: object, replace?: boolean
}): {
  state: DeepReadonly,
  updateState: (value: Partial>) => void,
  updateUrl: (value?: Partial>) => void,
  getState: () => DeepReadonly
} // (
  defaultState: T | { defaultState: T, searchParams?: object, replace?: boolean },
  searchParams?: object,
) {

मुश्किल बात यह है कि हस्ताक्षर कार्यान्वयन के साथ संगत होने चाहिए, इसलिए यह डिफ़ॉल्ट स्थिति है: टी | {डिफ़ॉल्टस्टेट: टी, सर्चपैराम्स?: ऑब्जेक्ट, रिप्लेस?: बूलियन }

मेरा मानना ​​है कि यदि पहले तर्क में एक विशिष्ट कुंजी है, तो यह एक नया ऑब्जेक्ट प्रारूप है।

  const _defaultState = ('defaultState' in defaultState ? defaultState.defaultState : defaultState) as T
  const _searchParams = ('defaultState' in defaultState ? defaultState.searchParams : searchParams) as object | undefined
  const _replace = ('defaultState' in defaultState ? defaultState.replace ?? true : false) as boolean

साथ ही, यह भी देख सकते हैं कि नए प्रारूप के लिए रिप्लेस तर्क का डिफ़ॉल्ट मान सत्य है, लेकिन पुराने प्रारूप के लिए यह गलत है।

आइए देखें यह कैसे काम करता है।

TS function overloading - real world example

ध्यान दें कि हमारे पास प्रत्येक हस्ताक्षर के लिए अलग-अलग JSDoc टिप्पणियाँ हैं, पुराने को @deprecated टैग के साथ चिह्नित किया गया है।

आधिकारिक दस्तावेज़ https://www.typescriptlang.org/docs/handbook/2/functions.html#function-overloads

पढ़ने के लिए टीएनएक्स :)

अपने अनुभव के बारे में एक टिप्पणी छोड़ें, या यदि आपके पास कोई विचार है कि इसे और अधिक सुंदर ढंग से कैसे किया जाए।

विज्ञप्ति वक्तव्य यह आलेख यहां पुन: प्रस्तुत किया गया है: https://dev.to/asmyshlyaev177/ts-function-overloading-real-world-example-36c8?1 यदि कोई उल्लंघन है, तो कृपया इसे हटाने के लिए स्टडी_गोलंग@163.com से संपर्क करें।
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3