typescript - कार्यों की एक टाइप की सरणी




(2)

मैं यह पता लगाने के लिए संघर्ष कर रहा हूं कि टाइपस्क्रिप्ट में एक स्थिर रूप से टाइप की गई सरणी घोषित करने के लिए संभव है या नहीं।

उदाहरण के लिए, मैं यह कर सकता हूं:

foo: (data:string) => void = function (data) {};

लेकिन अगर मैं फू को ऐसे कार्यों की सरणी बनाना चाहता हूं जो स्ट्रिंग लेते हैं और कुछ भी वापस नहीं करते हैं, तो मैं यह कैसे कर सकता हूं?

foo: (data:string) => void [] = [];

काम नहीं करता है क्योंकि टाइपस्क्रिप्ट सोचता है कि यह एक ऐसा फ़ंक्शन है जो स्ट्रिंग लेता है और शून्य की एक सरणी देता है, और ऐसा लगता है कि मुझे फ़ंक्शन को ब्रैकेट में लपेटने की कोशिश नहीं है।

कोई विचार?

उत्तर : नीचे उल्लिखित करने के लिए धन्यवाद, यहां एक उदाहरण है जो टाइपस्क्रिप्ट प्लेग्राउंड में काम करता है:

class whatever {
public foo: { (data: string): void; }[] = [];

    dofoo() {
        for (var i=0; i < this.foo.length; i++) {
             this.foo[i]("test");
        }
    }
}

var d = new whatever();

d.foo.push(function(bar){alert(bar)})
d.foo.push(function(bar){alert(bar.length.toString())})

d.dofoo();

अन्य (नए, अधिक पठनीय) वसा तीरों का उपयोग करके कार्यों की सरणी टाइप करने के तरीके:

let foo: Array<(data: string) => void>;
let bar: ((data: string) => void)[];

आप इसे भाषा स्पेक सेक्शन 3.5.5 में पा सकते हैं:

foo: { (data: string): void; } []




typescript