ফাইলটিতে Property has no initializer and is not definitely assigned in the constructorকিছু কনফিগারেশন যুক্ত করার সময় আমরা বার্তাটি পেতে পারি tsconfig.jsonযাতে একটি কৌণিক প্রকল্পটি কড়া মোডে সংকলিত হয়:
"compilerOptions": {
"strict": true,
"noImplicitAny": true,
"noImplicitThis": true,
"alwaysStrict": true,
"strictNullChecks": true,
"strictFunctionTypes": true,
"strictPropertyInitialization": true,
প্রকৃতপক্ষে সংকলকটি অভিযোগ করে যে কোনও সদস্যের পরিবর্তনশীল ব্যবহারের আগে সংজ্ঞায়িত করা হয় না।
সংকলনের সময়ে সংজ্ঞায়িত নয় এমন সদস্যের ভেরিয়েবলের উদাহরণের জন্য, সদস্য ভেরিয়েবলের একটি @Inputনির্দেশ রয়েছে:
@Input() userId: string;
ভেরিয়েবলটি beচ্ছিক হতে পারে উল্লেখ করে আমরা সংকলকটি নিরব করতে পারি:
@Input() userId?: string;
তবে তারপরে, আমাদের ভেরিয়েবল সংজ্ঞায়িত না হওয়ার ক্ষেত্রে মোকাবেলা করতে হবে, এবং এই জাতীয় কিছু বিবৃতি দিয়ে সোর্স কোডটিকে বিশৃঙ্খলা করতে হবে:
if (this.userId) {
} else {
}
পরিবর্তে, এই সদস্যের ভেরিয়েবলের মান জানার সময় নির্ধারণ করা হবে, এটি ব্যবহারের আগে এটি সংজ্ঞায়িত করা হবে, আমরা সংস্থাপককে বলতে পারি এটি সংজ্ঞায়িত না হওয়ার বিষয়ে চিন্তা না করার জন্য।
এইটি সংকলককে বলার উপায় হ'ল ! definite assignment assertionঅপারেটরটি যুক্ত করা, যেমন:
@Input() userId!: string;
এখন, সংকলক বুঝতে পারে যে এই পরিবর্তনশীলটি সংকলনের সময় সংজ্ঞায়িত না হলেও এটি রান-টাইমে এবং সময় ব্যবহারের আগে সংজ্ঞায়িত হবে।
এই ভেরিয়েবলটি ব্যবহারের আগে সংজ্ঞায়িত করা হয়েছে তা নিশ্চিত করার জন্য এটি এখন অ্যাপ্লিকেশনটির।
একটি অতিরিক্ত সুরক্ষা হিসাবে, আমরা ভেরিয়েবলটি ব্যবহারের আগে সংজ্ঞায়িত করা হচ্ছে তা জোর দিয়ে বলতে পারি।
আমরা জোর করে বলতে পারি যে ভেরিয়েবলটি সংজ্ঞায়িত হয়, যা প্রয়োজনীয় ইনপুট বাইন্ডিংটি প্রকৃতপক্ষে কলিং প্রসঙ্গে সরবরাহ করা হয়েছিল:
private assertInputsProvided(): void {
if (!this.userId) {
throw (new Error("The required input [userId] was not provided"));
}
}
public ngOnInit(): void {
this.assertInputsProvided();
}
ভেরিয়েবলটি নির্ধারণ করা হয়েছিল, ভেরিয়েবলটি এখন ব্যবহার করা যেতে পারে:
ngOnChanges() {
this.userService.get(this.userId)
.subscribe(user => {
this.update(user.confirmedEmail);
});
}
নোট করুন যে ngOnInitপদ্ধতিটি ইনপুট বাইন্ডিং প্রচেষ্টা পরে ডাকা হয়, এটি, এমনকি যদি বাইন্ডিংগুলিতে কোনও প্রকৃত ইনপুট সরবরাহ না করা হয়।
যেখানে ngOnChangesইনপুট বাইন্ডিং চেষ্টার পরে পদ্ধতি বলা হয়, এবং কেবল যদি সেখানে প্রকৃত বাইন্ডিং প্রদান করা ইনপুট ছিল।