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


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.