অবজেক্ট ডেস্ট্রাকচারিংয়ের প্রকারগুলি


120

এই

const { foo: IFoo[] } = bar;

এবং এই

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

যুক্তিযুক্তভাবে একটি ত্রুটি ঘটায়।

এবং এই

const { foo: TFoo } = bar;

শুধু destructure হবে TFooসম্পত্তি।

কাঠামোগত বস্তুর বৈশিষ্ট্যগুলির জন্য কীভাবে প্রকারগুলি নির্দিষ্ট করা যায়?


ভাল প্রশ্ন, কিন্তু এটি barযেভাবেই হোক সংজ্ঞা থেকে প্রকারটি নির্ধারণ করতে সক্ষম হবে না?

2
এটি এখানে বেশ ভাল আচ্ছাদিত করা হয় ।

@ ব্যবহারকারী 663031 মন্তব্যটি বিভ্রান্তিকর হওয়ায় সরানো উচিত।
সাসুক উচিহ

@ সাশুকেউচিহ নিবন্ধটি উপলভ্য নয়, তবে বেশিরভাগ নিবন্ধটি নিবন্ধের শিরোনাম দ্বারা গুগল করা যেতে পারে। এটি mariusschulz.com/blog/… এ সরানো হয়েছে । এটি সত্যই কিছুটা আলোকপাত করে।
এস্তাস ফ্লাস্ক

এটা সহায়ক। ধন্যবাদ.
সাসুক উচিহা

উত্তর:


187

এটি দেখা যাচ্ছে :যে পুরো ডেস্ট্রাকচারিং প্যাটার্নের জন্য প্রকারটি নির্দিষ্ট করে দেওয়া সম্ভব :

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

বাস্তবে যা পুরানো এর চেয়ে ভাল আর কিছু নয়

const foo: IFoo[] = bar.foo;

2
তবে {foo}মান হয় না। এটিকেই সাধারণত "ডিকনস্ট্রাক্টিং অ্যাসাইনমেন্ট প্যাটার্ন" বলা হয়। আপনি এখানে যা দেখছেন তা হ'ল একটি বিশেষ টাইপস্ক্রিপ্ট বৈশিষ্ট্য যা ধরণের ধরণেরগুলির সাথে সম্পর্কিত হতে দেয়।

প্রকৃতপক্ষে, এটি আরও একটি বিশেষ কেসের মতো, বিশেষত তুলনায় let x, y, z: stringযা আপাতদৃষ্টিতে zকেবল টাইপ নির্দিষ্ট করে । আমি উত্তর আপডেট।
আর্টেম

54

আমি পার্টিতে স্পষ্টভাবে কিছুটা দেরি করেছি, কিন্তু:

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) সঠিকভাবে টাইপ না করা হয় তবে এর প্রকারটি দৃserted়ভাবে দেওয়া যেতে পারে:

const { foo } = bar as { foo: IFoo[] }; // foo type is IFoo[]
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.