2015-03-07 17 views
8

मैं टाइपस्क्रिप्ट में grunt task लिख रहा हूं। मैं जावास्क्रिप्ट में पहले से मौजूद कुछ का अनुवाद करने की कोशिश कर रहा हूं।टाइपस्क्रिप्ट फ़ंक्शन में 'इस' के प्रकार को घोषित करना?

तो, जब कोई काम एक रन चलाता है, तो यह एक फ़ंक्शन चलाता है। जब यह चलता है, तो grunt this को उपयोगी गुणों वाले ऑब्जेक्ट पर सेट करता है, वैसे ही jQuery जिस तत्व पर आप काम कर रहे हैं उसके साथ this ओवरलोड करता है। मैं this.files जैसे उपयोगी गुणों तक पहुंच सकता हूं;

grunt.registerMultiTask('clean', function() { 
    this.files.forEach(function(f) { Delete(f); }); 
}); 

तो, "this.files में सभी फ़ाइलों को हटाएं"।

हालांकि, टाइपस्क्रिप्ट में, मुझे नहीं पता कि आप संकलक को 'संकेत' दे सकते हैं कि this एक विशेष प्रकार है, इसलिए मुझे इंटेलिजेंस नहीं मिलता है। मैं अलग-अलग प्रकार के लिए this पर विचार करने के लिए टाइपस्क्रिप्ट कैसे कहूं?

उत्तर

2

मैं कैसे बता टाइपप्रति इस पर विचार करने के एक अलग प्रकार

वहाँ एक समर्पित वाक्य रचना इस के लिए नहीं है के लिए मुझे क्या अभी तक लेकिन इसके बारे में बात करती है इस प्रकार हैं:

: https://github.com/Microsoft/TypeScript/issues/229

अभी के लिए तुमने क्या किया प्रभावी ढंग से एक ही तरीका है, हालांकि मैं एक अभिकथन प्रयोग नहीं करेंगे और सिर्फ एक प्रकार एनोटेशन का उपयोग करें 0

var self:grunt.task.IMultiTask<string> = this; 
self.files.forEach(function (f) { 

}); 
0

मेरे पास कुछ जवाब है। मे यह कर सकती हु;

var self = <grunt.task.IMultiTask<string>>this; 
self.files.forEach(function (f) { 

}); 

जो ठीक काम करता है। यह वाला तीर कार्यों लिखने में सक्षम नहीं किया जा रहा है की तरह परिणाम हो रहा है, ...

+1

आप एक अभी भी लिखने तीर नहीं ले करता है पसंद करते हैं कार्य, क्योंकि वे 'स्वयं' चर को बंद कर देंगे। तीर कार्यों में 'यह' अभी भी गलत टाइप किया जाएगा, लेकिन कम से कम आप कुछ पात्रों को बचा सकते हैं! – Yourpalal

8

अब (टीएस 2.0 से) आप नकली का उपयोग करके समारोह का this प्रकार निर्दिष्ट कर सकते हैं इस पैरामीटर (पहले एक होना चाहिए):

grunt.registerMultiTask('clean', function(this:SomeType) { 
    //... 
}); 
0

हालांकि मैंने देखा कि इस के साथ अब संभव है:

class ClassyClass { 
    prop = 'Juicy Strings' 
} 

function x(this: ClassyClass) { 
    console.log(this.prop) 
} 

मैं आ गए हैं एक विकल्प है कि अचल संपत्ति में तर्क लाइन

function x() { 
    const that: ClassyClass = this 

    console.log(that.prop) 
} 
संबंधित मुद्दे