2016-07-22 6 views
8

पर पारित पैरामीटर की गलत संख्या की जांच कैसे करें मैं लिंटर के रूप में टाइपस्क्रिप्ट और tslint का उपयोग कर एक प्रोग्राम लिख रहा हूं। नियमों का मेरे वर्तमान पसंदीदा सूची निम्नलिखित (tslint.json) है:फ़ंक्शन

{ 
    "extends": "tslint:recommended", 

    "rules": { 
     "comment-format": [false, "check-space"], 
     "eofline": false, 
     "triple-equals": [false, "allow-null-check"], 
     "no-trailing-whitespace": false, 
     "one-line": false, 
     "no-empty": false, 
     "typedef-whitespace": false, 
     "whitespace": false, 
     "radix": false, 
     "no-consecutive-blank-lines": false, 
     "no-console": false, 
     "typedef": [true, 
      "variable-declaration", 
      "call-signature", 
      "parameter", 
      "property-declaration", 
      "member-variable-declaration" 
     ], 
     "quotemark": false, 
     "no-any": true, 
     "one-variable-per-declaration": false 
    } 

} 

हालांकि मैं Tslint उपयोग कर रहा हूँ यह पैरामीटर की गलत संख्या के साथ एक समारोह के लिए एक फोन करने को पकड़ने के लिए विफल रहता है। उदाहरण के लिए मैं निम्नलिखित कार्य हो:

let displayTimer: Function = function(): void { 
    document.getElementById('milliseconds').innerHTML = ms.toString(); 
    document.getElementById('seconds').innerHTML = seconds.toString(); 
    document.getElementById('minutes').innerHTML= minutes.toString(); 
}; 

और मैं के साथ बोल रहा हूँ इस तरह एक और समारोह के अंदर से:

let turnTimerOn: Function = function(): void { 

    ms += interval; 

    if (ms >= 1000) 
    { 
     ms = 0; 
     seconds += 1; 
    } 

    if (seconds >= 60) 
    { 
     ms = 0; 
     seconds = 0; 
     minutes += 1; 
    } 

    displayTimer(1); 
}; 

आप देख सकते हैं मैं displayTimer समारोह के लिए एक पैरामीटर गुजर रहा (इस मामले में नंबर 1 लेकिन यह कुछ और हो सकता है) और लिटर उस पर पकड़ नहीं रहा है।

+0

अच्छी तरह से, ऐसा इसलिए है क्योंकि यह अमान्य जावास्क्रिप्ट नहीं है। यह उन मानों को पारित करने के लिए पूरी तरह से मान्य है जिन्हें आपने पैरामीटर के रूप में परिभाषित नहीं किया है और बाद में ** तर्क ** का उपयोग करके उन्हें फ़ंक्शन में पुनर्प्राप्त करें। – toskv

+0

इसे इंगित करने के लिए धन्यवाद। मैं जावा/सी # पृष्ठभूमि से आ रहा हूं इसलिए मैं इस प्रकार के मेल के लिए जांच करने में सक्षम होना चाहता हूं। कोई विचार? – skiabox

+0

शायद मुझे कुछ याद आ रहा है लेकिन क्या कोई कारण है कि फ़ंक्शन को 'फ़ंक्शन डिस्प्ले टाइमर(): शून्य {'? मुझे लगता है कि टीएस बेहतर जांचने में सक्षम होगा। अभी टाइपिंग के लिए यह सब काम कर रहा है 'डिस्प्ले टाइमर: फंक्शन = ??? '। यह नहीं जानता कि किसी बिंदु पर आप शून्य या कुछ अन्य फ़ंक्शन को फिर से सौंपेंगे। – Katana314

उत्तर

5

बस प्रकार Function हटाने और टाइपप्रति हस्ताक्षर की जांच होगी:

let displayTimer = function(): void { 
    // ... 
}; 

displayTimer(1); // Error: Supplied parameters does not match any signature of call target 

displayTimer की अनुमानित प्रकार Function नहीं है, लेकिन () => void (जो किसी भी हस्ताक्षर स्वीकार करता है)।

the code in the PlayGround देखें।

+0

आपके उत्तर के लिए धन्यवाद। आप टाइपस्क्रिप्ट कंपाइलर के बारे में सही थे जो फंक्शन प्रकार घोषणा को हटाते समय त्रुटि का पता लगाता है। समस्या यह है कि जैसे ही मैं घोषणा को हटाता हूं, इन त्लिंट नियमों के साथ मैं देखता हूं कि tslint इस निष्कासन के बारे में शिकायत करता है (टीएसलिंट : अपेक्षित परिवर्तनीय घोषणा: 'displayTimer' को typedef (typedef) रखने के लिए) – skiabox

+0

आपके सुझाव के बाद मैंने एक ही पंक्ति में एक मूल्य घोषित करने और असाइन करने के लिए निम्न कोड का उपयोग किया है। यह थोड़ा बदसूरत है लेकिन यह काम करता है: 'डिस्प्ले टाइमर :() => शून्य = फ़ंक्शन(): शून्य { document.getElementById ('मिलीसेकंड')। आंतरिक HTML = ms.toString(); document.getElementById ('सेकंड')। आंतरिक HTML = सेकंड्स .toString(); document.getElementById ('मिनट')। आंतरिक HTML = minutes.toString(); }; ' – skiabox

+0

@skiabox आईएमओ, आपको उस अनुमान का उपयोग करना चाहिए जहां इसका उपयोग किया जा सकता है। 'डिस्प्ले टाइमर:() => शून्य = फ़ंक्शन(): शून्य {/ * ... * /}' DRY नहीं है। – Paleo