2017-03-03 4 views
8

क्या param को स्ट्रिंग्स, एरे इत्यादि स्वीकार नहीं करना संभव है?टाइपस्क्रिप्ट स्ट्रिंग या सरणी स्वीकार करने से कोई गुण नहीं है

interface foo { 
    a?: number; 
    b?: string; 
} 

function baz(param: foo) { 
} 

baz("hello"); 
+1

आपको परवाह क्यों है? यदि यह आपके इंटरफ़ेस को फिट करता है, तो आप क्यों सोचते हैं कि यह एक स्ट्रिंग या ऑब्जेक्ट है? –

+2

हमारे पास एक बग था जहां हम ऑब्जेक्ट की बजाय वस्तु की संपत्ति को पार कर रहे थे, और टाइपस्क्रिप्ट ठीक संकलित। – user3233089

+0

यह एक वैध चिंता है। –

उत्तर

5

आप baz कम से कम एक वस्तु को स्वीकार करने के लिए कुछ इस तरह कर सकते हैं:

interface foo { 
    a?: number; 
    b?: string; 
} 

interface notAnArray { 
    forEach?: void 
} 

type fooType = foo & object & notAnArray; 

function baz(param: fooType) { 
} 

baz("hello"); // Throws error 
baz([]); // Throws error 

यहाँ fooType एक Intersection Type है।

+0

क्या वह धोखा नहीं है? आप मजबूर कर रहे हैं कि पैरामीटर एक वस्तु होना चाहिए। –

+1

@MuratK .: क्या वह ओपी चाहता है? लेकिन मैं इसे एक प्रकार बनाने की दिशा में दुबला नहीं होगा, बस 'फ़ंक्शन बाज़ (param: foo & object) ' –

+1

यह ध्यान देने योग्य है कि' ऑब्जेक्ट 'प्रकार बहुत नया है, आपको इसका उपयोग करने के लिए टाइपस्क्रिप्ट 2.2 की आवश्यकता होगी। –

संबंधित मुद्दे