'এটি'র স্পষ্টত' টাইপ করুন 'যেহেতু এটিতে কোনও ধরণের টিকা নেই


123

যখন আমি সক্ষম noImplicitThisমধ্যে tsconfig.json, আমি নিম্নলিখিত কোড এই ত্রুটি পাবেন:

'this' implicitly has type 'any' because it does not have a type annotation.
class Foo implements EventEmitter {
  on(name: string, fn: Function) { }
  emit(name: string) { }
}

const foo = new Foo();
foo.on('error', function(err: any) {
  console.log(err);
  this.emit('end');  // error: `this` implicitly has type `any`
});

thisকলব্যাক পরামিতিগুলিতে টাইপ করা একই ত্রুটির ফলাফল:

foo.on('error', (this: Foo, err: any) => { // error: `this` implicitly has type `any`

একটি workaround thisঅবজেক্টের সাথে প্রতিস্থাপন করা হয়:

foo.on('error', (err: any) => {
  console.log(err);
  foo.emit('end');
});

তবে এই ত্রুটির সঠিক সমাধান কী?


আপডেট: এটি thisকলব্যাকে একটি টাইপ যুক্ত প্রকৃতপক্ষে ত্রুটির ঠিকানা দেখায় । আমি ত্রুটিটি দেখছিলাম কারণ আমি একটি ধরণের টীকাযুক্ত সহ একটি তীর ফাংশনটি ব্যবহার করছিলাম this:

টাইপস্ক্রিপ্ট খেলার মাঠ


আপনি কি টাইপস্ক্রিপ্ট ২.১ বা রাতের সংস্করণে এটি ব্যবহার করে দেখেছেন?
— ড্যানিয়েল রোজনওয়াসার

@ ড্যানিয়েলরোজেনওয়াসার ২.১.৪
— টনি 19

এবং আমি এখন ওয়েবস্টোরম এবং টিএস খেলার মাঠের অভিযোগের কারণটি দেখছি: আমি একটি তীর ফাংশনটি ব্যবহার করছিলাম যখন এর জন্য একটি ধরণের টিকা দেওয়া ছিল this।
— টনি 19

2
আমি এখানে একটি বাগ দায়ের করেছি: github.com/Mic Microsoft / TypeScript / issues / 13768 - এটি ট্র্যাক করতে এবং থাম্বস আপ দিতে দ্বিধা বোধ করুন।
— ড্যানিয়েল রোজনওয়াসার

উত্তর:


139

ত্রুটিটি প্রকৃতপক্ষে thisপ্রথম কলব্যাক পরামিতি হিসাবে কোনও ধরণের টিকা দিয়ে সন্নিবেশ করানো হয়েছে । এটি করার জন্য আমার প্রচেষ্টাটি একই সাথে কলব্যাককে তীর-ফাংশনে পরিবর্তনের মাধ্যমে প্রবর্তিত হয়েছিল:

foo.on('error', (this: Foo, err: any) => { // DON'T DO THIS

এটি হওয়া উচিত ছিল:

foo.on('error', function(this: Foo, err: any) {

অথবা এটা:

foo.on('error', function(this: typeof foo, err: any) {

সংকলকের ত্রুটি বার্তাটি উন্নত করার জন্য এবং তীর-ফাংশন সহ প্রকৃত ব্যাকরণ ত্রুটি হাইলাইট করার জন্য একটি গিটহাব ইস্যু তৈরি করা হয়েছিল this।


আপনি যদি কনস্ট্রাক্টরে 'এটি' ব্যবহার করেন তবে 'এটির' কী ধরণের টিকা আছে?
— ব্লু

@ ব্লু সদস্যের সম্পত্তি / ফাংশনটি রেফারেন্স হিসাবে ধরে নেওয়া হচ্ছে, thisক্লাসটি প্রারম্ভিক হওয়ার ধরণ হবে। উদাহরণস্বরূপ, যদি constructorক্লাসের জন্য হয় MyClassতবে টাইপ টীকাটি thisহবে MyClass।
— টনি 19
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.