वस्तु विनाशकारी प्रकार में


122

यह

const { foo: IFoo[] } = bar;

और इस

const { foo: Array<IFoo> } = bar;

यथोचित त्रुटि का कारण होगा।

और इस

const { foo: TFoo } = bar;

बस विनाशकारी TFooसंपत्ति होगी ।

प्रकारों को विनाशकारी वस्तु गुणों के लिए कैसे निर्दिष्ट किया जा सकता है?


अच्छा सवाल है, लेकिन क्या यह barवैसे भी परिभाषा से टाइप करने में सक्षम नहीं है ?

2
यह यहाँ काफी अच्छी तरह से कवर किया गया है

@ उपयोगकर्ता 663031 टिप्पणी को हटा दिया जाना चाहिए क्योंकि यह भ्रामक है।
सासुके उचिहा

@SasukeUchiha लेख अनुपलब्ध है, लेकिन अधिकांश लेख लेख शीर्षक से गुगले जा सकते हैं। इसे mariusschulz.com/blog/… में ले जाया गया । यह वास्तव में कुछ प्रकाश डालता है।
एस्टस फ्लास्क

यह मददगार है। धन्यवाद।
सासुके उचिहा

जवाबों:


189

यह पता चलता है :कि पूरे विनाशकारी पैटर्न के बाद के प्रकार को निर्दिष्ट करना संभव है :

const {foo}: {foo: IFoo[]} = bar;

जो वास्तव में सादे पुराने से बेहतर नहीं है

const foo: IFoo[] = bar.foo;

2
लेकिन {foo}एक मूल्य नहीं है। यह वह है जिसे आम तौर पर "डिकॉन्स्ट्रक्टिंग असाइनमेंट पैटर्न" कहा जाता है। आप यहां जो देख रहे हैं, वह वास्तव में एक विशेष टाइपस्क्रिप्ट सुविधा है जो इस तरह के पैटर्न से जुड़े होने की अनुमति देता है।

वास्तव में, यह विशेष रूप से एक विशेष मामले की तरह है, let x, y, z: stringजिसकी तुलना में स्पष्ट रूप से zकेवल प्रकार के लिए निर्दिष्ट होता है। मैंने जवाब अपडेट किया।
आर्टेम

55

मैं स्पष्ट रूप से पार्टी के लिए थोड़ा देर से, लेकिन:

interface User {
  name: string;
  age: number;
}

const obj: any = { name: 'Johnny', age: 25 };
const { name, age }: User = obj;

गुण के प्रकार nameऔर ageसही ढंग से करने के लिए अनुमान लगाया जा चाहिए stringऔर numberक्रमशः।


9
यह एक दुर्लभ मामला है जब आप हर विनाश के लिए एक इंटरफ़ेस का उपयोग करना चाहते हैं।
आरए

2

मेरे अपने प्रश्न के लिए अनुवर्ती।

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

यह देखते हुए कि barठीक से टाइप किया गया था, fooटाइप किया जाएगा:

const bar = { foo: [fooValue], ... }; // bar type is { foo: IFoo[], ... }
...
const { foo } = bar; // foo type is IFoo[]

यहां तक ​​कि अगर barसही ढंग से टाइप ( anyया unknown) नहीं किया गया है , तो इसका प्रकार मुखर किया जा सकता है:

const { foo } = bar as { foo: IFoo[] }; // foo type is IFoo[]
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.