TypeScript Academy · पाठ

जेनेरिक और अनुमान वाले कस्टम हुक

मानों, परिणामों और त्रुटियों के लिए वाले पुनः-उपयोग योग्य कस्टम हुक लिखें; सुरक्षित API के लिए अनुमान और बाधाओं का लाभ उठाएँ।

पाठ 1, कुल 2 में से8 चरण

जेनेरिक और अनुमान वाले कस्टम हुक, CoddyKit पर TypeScript Academy का एक निःशुल्क पाठ है। यह 2 में से 1वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह TypeScript Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। TypeScript Academy पाठ्यक्रम में कुल 2 पाठ शामिल हैं।

परिचय

लक्ष्य: ऐसे जेनेरिक हुक बनाएँ जो मूल React API जैसे लगें: टाइप किया हुआ localStorage हुक, एसिंक्रोनस लोडर और नियंत्रित/अनियंत्रित सहायक। आप अनुमान पर निर्भर रहेंगे, इसलिए कॉल करने वालों को शायद ही कभी प्रकारों का एनोटेशन देना पड़ेगा।

  • React जैसे सहज उपयोग के लिए टपल लौटाएँ
  • आवश्यकता होने पर सीमाओं का उपयोग करें
  • किसी भी प्रकार का उपयोग न करें

useLocalStorage<T>

[मान, set] जैसी टपल लौटाएँ, ठीक useState की तरह। मान और सेटर में T को एकसमान रखें।

import { useEffect, useState } from "react"

export function useLocalStorage<T>(key: string, initial: T): [T, (v: T | ((prev: T) => T)) => void] {
  const [value, setValue] = useState<T>(() => {
    try {
      const raw = localStorage.getItem(key)
      return raw ? (JSON.parse(raw) as T) : initial
    } catch {
      return initial
    }
  })

  useEffect(() => {
    try { localStorage.setItem(key, JSON.stringify(value)) } catch {}
  }, [key, value])

  const set = (v: T | ((prev: T) => T)) => {
    setValue(prev => (typeof v === "function" ? (v as (p: T) => T)(prev) : v))
  }

  return [value, set]
}

// Usage
// const [user, setUser] = useLocalStorage("user", { id: 1, name: "Ada" })

useAsync<T>

मान, त्रुटि और लोडिंग स्थिति वाला ऑब्जेक्ट लौटाएँ। value का प्रकार fn से लौटाए गए प्रॉमिस के आधार पर अनुमानित होता है।

import { useEffect, useState } from "react"

export function useAsync<T>(fn: () => Promise<T>, deps: unknown[] = []) {
  const [value, setValue] = useState<T | null>(null)
  const [error, setError] = useState<unknown>(null)
  const [loading, setLoading] = useState<boolean>(false)

  useEffect(() => {
    let cancelled = false
    setLoading(true)
    fn().then(
      (v) => { if (!cancelled) { setValue(v); setError(null) } },
      (e) => { if (!cancelled) { setError(e); setValue(null) } }
    ).finally(() => { if (!cancelled) setLoading(false) })
    return () => { cancelled = true }
  }, deps)

  return { value, error, loading }
}

// Usage
// const { value, error, loading } = useAsync(() => fetch("/api").then(r => r.json()))

useControlled<T>

एक ही सहायक से नियंत्रित और अनियंत्रित दोनों पैटर्न का समर्थन करें। टपल T को अनुरूप बनाए रखती है।

import { useState } from "react"

type ControlledProps<T> = {
  value?: T
  defaultValue: T
  onChange?: (v: T) => void
}

export function useControlled<T>({ value, defaultValue, onChange }: ControlledProps<T>): [T, (v: T) => void] {
  const [inner, setInner] = useState<T>(defaultValue)
  const isControlled = value !== undefined
  const current = isControlled ? (value as T) : inner
  const set = (v: T) => { isControlled ? onChange?.(v) : setInner(v) }
  return [current, set]
}

// Usage
// const [v, setV] = useControlled({ value, defaultValue: "", onChange: setValue })

अनुमान और सीमाएँ

तर्कों से अनुमान को प्राथमिकता दें; केवल तब extends सीमाएँ जोड़ें जब आपके हुक को विशिष्ट फ़ील्ड की आवश्यकता हो।

// Inference works from the initial value
const [settings, setSettings] = useLocalStorage("settings", { theme: "dark", pageSize: 20 })
// T = { theme: string; pageSize: number }

// Constrain T when needed
interface WithId { id: string }
function useById<T extends WithId>(items: T[], id: string) {
  return items.find(x => x.id === id) || null
}

// Usage
const user = useById([{ id: "u1", name: "Ada" }], "u1")

सुझाव

सुझाव:

  • React जैसा अनुभव और एकसमान टाइपिंग देने के लिए टपल लौटाएँ।
  • सार्वजनिक हुक सिग्नेचर में कभी भी any का उपयोग न करें।
  • सुविधाजनक स्थिति बदलावों के लिए अपडेटर (prev) => next स्वीकार करें।

हुक टाइपिंग जाँच

त्वरित जाँच: जेनेरिक localStorage हुक के लिए कौन-सा सिग्नेचर सबसे उपयुक्त है?

पुनरावलोकन

पुनरावलोकन: आपने ऐसे जेनेरिक हुक बनाए जो अनुमान पर निर्भर करते हैं, केवल आवश्यकता होने पर सीमाओं का उपयोग करते हैं और मूल React API जैसे लगने वाले टपल/ऑब्जेक्ट परिणाम उपलब्ध कराते हैं।

शुरुआत निःशुल्क

एआई शिक्षक के साथ TypeScript सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
101
पाठ
352

अक्सर पूछे जाने वाले प्रश्न

क्या “जेनेरिक और अनुमान वाले कस्टम हुक” पाठ निःशुल्क है?

हाँ—“जेनेरिक और अनुमान वाले कस्टम हुक” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और TypeScript Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। TypeScript Academy पाठ्यक्रम में कुल 2 पाठ शामिल हैं।

“जेनेरिक और अनुमान वाले कस्टम हुक” में मैं क्या सीखूँगा?

मानों, परिणामों और त्रुटियों के लिए वाले पुनः-उपयोग योग्य कस्टम हुक लिखें; सुरक्षित API के लिए अनुमान और बाधाओं का लाभ उठाएँ। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ TypeScript Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या TypeScript Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर TypeScript Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 2 में से 1वाँ पाठ है।

“जेनेरिक और अनुमान वाले कस्टम हुक” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस TypeScript Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर TypeScript Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. जेनेरिक और अनुमान वाले कस्टम हुक
  2. Suspense और त्रुटि सीमाओं के प्रकार
← TypeScript Academy पर वापस जाएँ