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


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.