আমি সজ্জকারদের সাথে ঘুরেফিরে খেলা শেষ করেছি এবং যে কোনও ডকুমেন্টেশন প্রকাশের আগে এই সুবিধাটি নিতে চাইলে যে কারও জন্য আমি কী খুঁজে পেয়েছি তা নথিভুক্ত করার সিদ্ধান্ত নিয়েছি। আপনি যদি কোনও ভুল দেখতে পান তবে নির্দ্বিধায় এটিকে সম্পাদনা করুন।
জেনারেল পয়েন্টস
- শ্রেণি ঘোষণার সময় সজ্জাকারীদের ডাকা হয় an যখন কোনও বস্তু তাত্ক্ষণিক হয় না।
- একাধিক সজ্জাকারক একই শ্রেণি / সম্পত্তি / পদ্ধতি / পরামিতিতে সংজ্ঞায়িত করা যায়।
- কনস্ট্রাক্টরগুলিতে সাজসজ্জার অনুমতি নেই।
একটি বৈধ সাজসজ্জা করা উচিত:
- সাজসজ্জারের এক ধরণের (
ClassDecorator | PropertyDecorator | MethodDecorator | ParameterDecorator) এর জন্য নির্ধারিত ।
- সজ্জিত মানকে বরাদ্দযোগ্য এমন কোনও মান (শ্রেণি সজ্জকার এবং পদ্ধতি সজ্জকারের ক্ষেত্রে) প্রদান করুন।
উল্লেখ
পদ্ধতি / ফর্মাল অ্যাকসেসর ডেকরেটার
বাস্তবায়ন পরামিতি:
target: ক্লাসের প্রোটোটাইপ ( Object)।
propertyKey: পদ্ধতির নাম ( string| symbol)।
descriptor: একটি TypedPropertyDescriptor- আপনি একটি বর্ণনাকারী এর কী এর মাধ্যমে অপরিচিত হন, তাহলে আমি এটা সম্পর্কে পড়ার পরামর্শ দেবেন এই ডকুমেন্টেশন উপর Object.defineProperty(এটা তৃতীয় প্যারামিটারটি এর)।
উদাহরণ - যুক্তি ছাড়াই
ব্যবহার করুন:
class MyClass {
@log
myMethod(arg: string) {
return "Message -- " + arg;
}
}
বাস্তবায়ন:
function log(target: Object, propertyKey: string, descriptor: TypedPropertyDescriptor<any>) {
const originalMethod = descriptor.value; // save a reference to the original method
// NOTE: Do not use arrow syntax here. Use a function expression in
// order to use the correct value of `this` in this method (see notes below)
descriptor.value = function(...args: any[]) {
// pre
console.log("The method args are: " + JSON.stringify(args));
// run and store result
const result = originalMethod.apply(this, args);
// post
console.log("The return value is: " + result);
// return the result of the original method (or modify it before returning)
return result;
};
return descriptor;
}
ইনপুট:
new MyClass().myMethod("testing");
আউটপুট:
পদ্ধতির আরগগুলি হ'ল: "" টেস্টিং "]
ফেরতের মানটি হ'ল: বার্তা - পরীক্ষা করা
মন্তব্য:
- বর্ণনাকারীর মান নির্ধারণের সময় তীর সিনট্যাক্স ব্যবহার করবেন না। প্রসঙ্গটি
thisযদি আপনি করেন তবে উদাহরণটি হবে না।
- নতুন বর্ণনাকারীকে ফিরিয়ে দিয়ে বর্তমানের উপরের লিখনের চেয়ে মূল বর্ণনাকারীটিকে সংশোধন করা ভাল। এটি আপনাকে একাধিক সজ্জকার ব্যবহার করতে অনুমতি দেয় যা অন্য ডেকরেটারের কাজটি ওভাররাইট না করে বিবরণী সম্পাদনা করে। এইটি করলে আপনি ভালো কিছু ব্যবহার করার অনুমতি দেয়
@enumerable(false)এবং @logএকই সময়ে (উদাহরণ: খারাপ বনাম গুড )
- দরকারী : টাইপ আর্গুমেন্টটি
TypedPropertyDescriptorকী পদ্ধতিতে স্বাক্ষরগুলি ( পদ্ধতির উদাহরণ ) বা অ্যাক্সেসরের স্বাক্ষরগুলি ( অ্যাকসেসরের উদাহরণ ) সজ্জা করতে হবে তা সীমাবদ্ধ করতে ব্যবহার করা যেতে পারে।
উদাহরণ - যুক্তি সহ (সজ্জা কারখানা)
যুক্তি ব্যবহার করার সময়, আপনাকে অবশ্যই সাজসজ্জারের পরামিতিগুলির সাথে কোনও ফাংশন ঘোষণা করতে হবে তারপরে কোনও যুক্তি ছাড়াই উদাহরণের স্বাক্ষর সহ একটি ফাংশন ফিরিয়ে আনতে হবে।
class MyClass {
@enumerable(false)
get prop() {
return true;
}
}
function enumerable(isEnumerable: boolean) {
return (target: Object, propertyKey: string, descriptor: TypedPropertyDescriptor<any>) => {
descriptor.enumerable = isEnumerable;
return descriptor;
};
}
স্থিতিশীল পদ্ধতি সাজসজ্জা
কিছু পার্থক্য সহ একটি পদ্ধতি সাজসজ্জার অনুরূপ:
- এর
targetপ্যারামিটারটি নিজেই কনস্ট্রাক্টর ফাংশন এবং প্রোটোটাইপ নয়।
- বর্ণনাকারী নির্ধারক কার্যক্রমে সংজ্ঞায়িত করা হয় প্রোটোটাইপ নয় ype
ক্লাস ডেকরেটার
@isTestable
class MyClass {}
বাস্তবায়ন পরামিতি:
target: শ্রেণি সাজসজ্জা ঘোষণা করা হয় ( TFunction extends Function)।
উদাহরণস্বরূপ ব্যবহার : ক্লাসে তথ্য সঞ্চয় করতে মেটাডেটা এপিআই ব্যবহার করা।
সম্পত্তি শোভাকর
class MyClass {
@serialize
name: string;
}
বাস্তবায়ন পরামিতি:
target: ক্লাসের প্রোটোটাইপ ( Object)।
propertyKey: সম্পত্তিটির নাম ( string| symbol)।
উদাহরণস্বরূপ ব্যবহার : একটি @serialize("serializedName")সাজসজ্জা তৈরি করা এবং বৈশিষ্ট্যটির তালিকাতে সম্পত্তিটির নাম যুক্ত করুন serial
প্যারামিটার ডেকোরেটর
class MyClass {
myMethod(@myDecorator myParameter: string) {}
}
বাস্তবায়ন পরামিতি:
target: ক্লাসের প্রোটোটাইপ ( Functionএটি মনে Functionহয় আর কাজ করে না any যে কোনও শ্রেণীর মধ্যে ডেকরেটার ব্যবহার করতে আপনার এখন anyবা Objectএখানে ব্যবহার করা উচিত Or বা শ্রেণীর ধরণ (গুলি) নির্দিষ্ট করুন যা আপনি এটি সীমাবদ্ধ রাখতে চান)
propertyKey: পদ্ধতির নাম ( string| symbol)।
parameterIndex: ফাংশনটির পরামিতিগুলির তালিকাতে প্যারামিটারের সূচক ( number)।
সহজ উদাহরণ
বিস্তারিত উদাহরণ (গুলি)
@Injectableএকটি প্রসাধক অনুবাদ করে, এবং পড়ুন