टाइपस्क्रिप्ट इंटरफ़ेस में वैकल्पिक कार्य


98

क्या वैकल्पिक फ़ंक्शन के साथ टाइपस्क्रिप्ट में एक इंटरफ़ेस बनाना संभव है?

interface IElement {
  name: string;
  options: any;
  type: string;
  value?: string;
  validation(any): boolean; // --> should be optional.

}

2
मुझे एक उत्तर मिला, मुझे लगता है कि वैकल्पिक कार्य को इस तरह लागू करना संभव है: सत्यापन ;: (कोई भी) => बूलियन;
— एंटोन सेलिन

जवाबों:


193

वर्तमान में तीन वाक्यविन्यास हैं जो टाइपस्क्रिप्ट इंटरफेस में फ़ंक्शन घोषणाओं की अनुमति देता है:

validationफ़ंक्शन के अपने उदाहरण का उपयोग करते हुए 1 पैरामीटर ( anyप्रकार का) और एक booleanवापसी मूल्य:

validation: {(flag: any): boolean};

या नए सिंटैक्स में:

validation(flag: any) : boolean;

या एक विकल्प है:

validation: (flag: any) => boolean;

समाधान:

इसलिए पुराने सिंटैक्स के साथ इसे वैकल्पिक बनाना आसान है:

validation?: {(flag: any): boolean};

दूसरे सिंटैक्स के साथ (हाल ही में जोड़ - धन्यवाद @toothbrush)

validation?(flag: any) : boolean;

या तीसरे सिंटैक्स में (जैसा कि आपने पाया):

validation?: (flag: any) => boolean;

3
जिस तरह से आपने इसे लिखा है, anyवह एक प्रकार नहीं है, बल्कि एक पैरामीटर का नाम है जो कि अनुमानित प्रकार का है any। पैरामीटर का नाम, यहां तक ​​कि इंटरफेस पर भी होना चाहिए। --NoImplicitAny सक्षम होने पर यह कोड संकलित करने में विफल रहेगा। यह कुछ इस तरह होना चाहिए: validation?:(whatever:any) => boolean;जहां whateverकुछ उचित पैरामीटर नाम है।
— NYCdotNet

@NYCdotNet: हाँ, मुझे मूल -पठन नहीं करना चाहिए था । सही किया गया :)
— कोडिंग किया गया

@ गया-कोडिंग हाय! मुझे कैसे पता चलेगा कि फ़ंक्शन परिभाषित है या नहीं?
— इलन ओल्किस

1
@IlanOlkies: जावास्क्रिप्ट में किसी भी चीज के लिए आप जिस तरह से परीक्षण करते हैं if (object.validation):) उसे वस्तु संदर्भ के खिलाफ होने की जरूरत है, इसलिए if (this.validation)यह आपकी परिस्थिति के आधार पर भी उचित हो सकता है।
— कोडिंग किया गया
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.