আমি যা পৌঁছেছিলাম তার চেয়ে ভালতর উপায় খুঁজতে গিয়ে আমি হোঁচট খেয়েছি। উত্তরগুলি পড়ে এবং সেগুলি চেষ্টা করে দেখে আমি ভেবেছিলাম যে আমি যা করছি তা পোস্ট করা ভাল কারণ অন্য উত্তরগুলি আমার পক্ষে সংক্ষিপ্ততা বোধ করে না। আমি যখনই একটি নতুন ইন্টারফেস সেটআপ করি তখন কেবলমাত্র একটি সংক্ষিপ্ত পরিমাণ কোড লিখতে হবে তা আমার পক্ষে গুরুত্বপূর্ণ ছিল। আমি স্থির ...
একটি কাস্টম জেনেরিক ডিপকপি ফাংশন ব্যবহার করে:
deepCopy = <T extends {}>(input: any): T => {
return JSON.parse(JSON.stringify(input));
};
আপনার ইন্টারফেস সংজ্ঞায়িত করুন
interface IX {
a: string;
b: any;
c: AnotherType;
}
... এবং পৃথক কনস্টে ডিফল্টগুলি সংজ্ঞায়িত করুন।
const XDef : IX = {
a: '',
b: null,
c: null,
};
তারপরে এইভাবে আরম্ভ করুন:
let x : IX = deepCopy(XDef);
এটাই দরকার ..
.. যাহোক ..
আপনি যদি কোনও মূল উপাদানকে কাস্টম করতে চান তবে কাস্টম ডিফল্ট মানগুলি গ্রহণ করতে আপনি ডিপকপি ফাংশনটি সংশোধন করতে পারেন। ফাংশনটি হয়ে যায়:
deepCopyAssign = <T extends {}>(input: any, rootOverwrites?: any): T => {
return JSON.parse(JSON.stringify({ ...input, ...rootOverwrites }));
};
যার পরিবর্তে এর পরিবর্তে এটি বলা যেতে পারে:
let x : IX = deepCopyAssign(XDef, { a:'customInitValue' } );
গভীর অনুলিপির অন্য কোনও পছন্দসই পদ্ধতি কাজ করবে। যদি কেবল অগভীর অনুলিপি প্রয়োজন হয় তবে অবজেক্ট.সেসাইন যথেষ্ট হবে, ইউটিলিটি deepCopyবা deepCopyAssignফাংশনটির প্রয়োজনীয়তা বাদ দিয়ে ।
let x : IX = object.assign({}, XDef, { a:'customInitValue' });
জ্ঞাত সমস্যা
- এটি এই ছদ্মবেশে গভীরভাবে নির্ধারিত হবে না তবে
deepCopyAssignনিয়োগের আগে পুনরাবৃত্তি এবং প্রকারগুলি পরীক্ষা করে পরিবর্তন করা খুব কঠিন নয় ।
- পার্স / স্ট্রিংফাই প্রক্রিয়া দ্বারা কার্য এবং রেফারেন্সগুলি হারিয়ে যাবে। আমার কাজের জন্য আমার সেগুলির দরকার নেই এবং ওপিও করেনি।
- কাস্টম আরম্ভের মানগুলি আইডিই দ্বারা ইঙ্গিত দেওয়া হয় না বা সম্পাদিত হলে পরীক্ষিত টাইপ হয় না।