2017-01-30 6 views
25

नहीं है, मैं निम्नलिखित कोड के लिए यह त्रुटि प्राप्त:'इस' परोक्ष प्रकार है 'कोई भी' जब मैं <code>tsconfig.json</code> में <code>noImplicitThis</code> सक्षम है क्योंकि यह एक प्रकार एनोटेशन

'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` 

का संभावित हल वस्तु के साथ this को बदलने के लिए है:

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

लेकिन इस त्रुटि के लिए उचित समाधान क्या है?


अद्यतन: यह एक टाइप किया this कॉलबैक करने के लिए वास्तव में त्रुटि के पते जोड़ने पता चला है।

typescript playground

+0

क्या आपने इसे टाइपस्क्रिप्ट 2.1 या रात के संस्करण पर आजमाया था? –

+0

@DanielRosenwasser 2.1.4 – tony19

+0

और अब मुझे वेबस्टॉर्म और टीएस खेल का मैदान शिकायत करने का कारण दिखाई देता है: मैं 'इस' के लिए एक प्रकार की एनोटेशन प्रदान करते समय एक तीर फ़ंक्शन का उपयोग कर रहा था। – tony19

उत्तर

30

त्रुटि वास्तव में पहले कॉलबैक पैरामीटर के रूप में एक प्रकार टिप्पणी के साथ this डालने से तय हो गई है: क्योंकि मैं 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) { 

ऐसा करने के लिए मेरे प्रयास एक साथ एक तीर-समारोह में कॉलबैक बदलकर असफल रहा था

एक गिटहब issue संकलक के त्रुटि संदेश को बेहतर बनाने और वास्तविक व्याकरण त्रुटि को हाइलाइट करने के लिए बनाया गया था ith this और तीर-फ़ंक्शंस।

+0

आप इसे इस लाइन के साथ कैसे ठीक करेंगे: https://github.com/pretenderjs/pretender/blame/master/README.md#L30 – Nikos

+0

@ निकोस यह काम करना चाहिए: 'नया प्रेटेंडर (फ़ंक्शन (यह: निविदा) {}) '[डेमो] (https://www.typescriptlang.org/play/#src=class%20Pretender%20%7B%0D%0A%20%20%20%20constructor (एफ% 3 ए% 20 समारोह)% 20% 7B% 20% 7 दिन% 0 d% 0A% 20% 20% 20% 20get (रों% 3A% 20string% 2C% 20f% 3A% 20Function)% 20% 7B% 20% 7 दिन% 0 d% 0A% 7 दिन% 0 d% 0A % 0 d% 0Aconst% 20server% 20% 3 डी% 20new% 20Pretender (समारोह 20% (यह% 3A% 20Pretender)% 20% 7B% 0 d% 0A% 20% 20% 20% 20this.get ('% 2Fphotos'% 2C % 20function 20%()% 20% 7B% 0 d% 0A% 20% 20% 20% 20% 20% 20% 20% 20console.log ('हैलो')% 3 बी% 0 d% 0A% 20% 20% 20% 20% 7 दिन)% 3 बी% 0 d% 0A% 7 दिन)% 3 बी% 0 d% 0A) – tony19

संबंधित मुद्दे