परिभाषित सामान्य समारोह के प्रकार और लागू करने के लिए कार्य असाइनमेंट

0

सवाल

मैं परिभाषित कर सकते हैं का उपयोग करें और एक सामान्य समारोह में इस तरह:

const fetchData = <T>(): T[] => {
  const arr: T[] = []
  // if stuff push to arr
  return arr
}

const emptyStringArray = fetchData<string>();

हालांकि, मेरे वास्तविक परिदृश्य में, मैं का एक बहुत कुछ है params और अलग करने के लिए बाहर typings और कार्य असाइनमेंट.

मैं लिखने का प्रयास किया, इस तरह:

type IFetchData = <T>() => T[]

const fetchData2: IFetchData = () => {
  const arr: T[] = []
  // if stuff push to arr
  return arr
}

const emptyStringArray = fetchData2<string>();

हालांकि, अब समारोह परिभाषा पहचान नहीं है T एक के रूप में उपलब्ध प्रकार.

नहीं मिल सकता है नाम 'टी'.

मैंने कोशिश की है की एक बहुत अलग अलग विन्यास पर डाल करने के लिए जहां <T>है , लेकिन कुछ भी नहीं काम करने लगता है - किसी भी विचार है?

डेमो में टीएस खेल का मैदान


से संबंधित प्रश्न

typescript typescript-generics
2021-11-24 02:12:27
3

सबसे अच्छा जवाब

2

IFetchData कर रही है वापसी टाइपिंग, आप के लिए तो यह काम करना चाहिए न आना करने के लिए सामान्य से fetchData2 समारोह में वापसी की है. निम्न काम करता है?

type IFetchData = <T>() => T[]
const fetchData2: IFetchData = () => {
  return [];
}
2021-11-24 02:18:56

करीब है, लेकिन आदर्श रूप में मैं करने में सक्षम हो जाएगा रखने के लिए सामान्य परिभाषा में. यह सरल बाहर की कोशिश में बनाने के लिए एक छोटा सा उदाहरण है, लेकिन मैं कर रहा हूँ वास्तव में बनाने के एक प्रारंभिक सरणी और धक्का obects यह करने के लिए अद्यतन उदाहरण
KyleMit

हम्म, अगर आप की जरूरत का उपयोग करने के लिए सामान्य के अंदर fetchData2 ऐसा लगता है जैसे दृष्टिकोण के लिए किया जाएगा करने के लिए इसी तरह अपने प्रारंभिक दृष्टिकोण (बिना IFetchData: const fetchData2 = <T>() => { const arr: T[] = []; return arr;}
Nick
1

सब से पहले, इस समारोह में:

const fetchData = <T,>(): T[] => {
    const arr: T[] = []
    arr.push(2) // error
    arr.push('str') // error

    return arr
}

करने के लिए कठिन है का उपयोग करें.

के बाद से गैर के अपने तर्क से संबंधित नहीं हैं T, टीएस करने की अनुमति नहीं होगी push किसी भी मूल्य के लिए arr. बेशक, आप उपयोग कर सकते हैं के प्रकार के दावे asहै , लेकिन यह बहुत असुरक्षित है:

const fetchData = <T,>(): T[] => {
    const arr: T[] = []
    arr.push('str' as any as T) // error

    return arr
}

const emptyStringArray = fetchData<number>(); // number[]
emptyStringArray[0].toExponential() // runtime error

से संबंधित प्रश्न/उत्तर, मेरे लेख

जवाब में आसान और सरल है: यह असंभव है, इस मामले में अलग करने के लिए T से समारोह परिभाषा के बिना समाधान.

यहाँ आप सबसे सरल तरीका है:

const fetchData = <T,>() => {
  const arr: T[] = []
  return arr
}

हालांकि, अगर आप चाहते हैं करने के लिए रूप बदलना अपने सरणी के अंदर fetchData, इस समारोह में हस्ताक्षर उपयोगी नहीं है । इस समारोह की अनुमति नहीं है कुछ भी करने के लिए के साथ arr. आप सब कर सकते है करने के लिए वापसी arr के बिना किसी भी परिवर्तन.

आदेश में रूपांतरित करने के लिए इस सूची में, आप की जरूरत है बनाने के लिए उच्च आदेश समारोह के दौरान बुला fetchData प्रदान स्पष्ट सामान्य तर्क:

type FetchData = <T>() => T[]
const fetchData: FetchData = () => []

const higherOrder = <T,>(elem: T) => {
  const arr = fetchData<T>();
  arr.push(elem)

  return arr
}



const test = higherOrder('str'); // ok, string[]
const test2 = higherOrder(42); // ok, number[]

खेल का मैदान

2021-11-24 08:54:18
0

सकता है आप इसे करने की कोशिश?

type IFetchData = <T>() => T[]
const fetchData2: IFetchData = <T>() => {
  return [];
}
2021-11-24 08:13:59

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में