कैसे करने के लिए घोषित चर के प्रकार एक या बी जब एक फैली अन्य में टाइपप्रति

0

सवाल

मैं एक संदर्भ प्रदाता धाराओं जो उपयोगकर्ता डेटा एप्लिकेशन को भर में.

मैं एक छात्र इंटरफ़ेस:

export interface Student extends User

मैं होगा की तरह प्रदाता करने के लिए वापस उपयोगकर्ता डेटा के प्रकार Student या User के रूप में निम्नानुसार:

let userData: Student | User = null;

कोशिश कर रहा है जब उपयोग करने के लिए एक ही संपत्ति के लिए उपलब्ध छात्रों, userData?.currentTeam, बनाम कोड फेंकता है, निम्नलिखित त्रुटि:

Property 'currentTeam' does not exist on type 'Student | User'.
  Property 'currentTeam' does not exist on type 'User'.ts(2339)

मैं मदद की जरूरत है खोजने के लिए बाहर क्यों यह है करने के लिए दोषी माता पिता इंटरफेस और अनुमति देने के लिए कैसे के विकल्प दोनों ।

1

सबसे अच्छा जवाब

1

इस मानक के व्यवहार यूनियनों: जब तक आप कुछ करने की जांच करने के लिए किस प्रकार आप के साथ काम कर रहे हैं, टाइपप्रति केवल उपयोग करने की अनुमति है कि गुणों पर मौजूद सभी संघ के सदस्य हैं.

यहाँ के कुछ उदाहरण हैं कि कैसे आप नीचे संकीर्ण कर सकते हैं प्रकार. आप जाँच कर सकते हैं अगर संपत्ति मौजूद है:

if ('currentTeam' in userData) {
  console.log(userData.currentTeam);
}

या यदि आप बना लिया है वर्गों (जो आप नहीं हो सकता है), आप कर सकते हैं का उपयोग का उदाहरण:

if (userData instanceof Student) {
  console.log(userData.currentTeam);
}

या, आप कर सकते हैं के प्रकार बदलने के लिए तो वे सब एक संपत्ति में आम है, जो आप कर सकते हैं, तो देखने के लिए जाँच किस प्रकार आप के साथ काम कर रहे हैं. यह कभी कभी कहा जाता है एक "भेदभाव"संघ.

interface User {
  type: 'user',
  // rest of the type here
}

interface Student extends User {
  type: 'student',
  currentTeam: // something,
  // rest of the type here
}

if (userData.type === 'student') {
  console.log(userData.currentTeam);
}
2021-11-24 00:11:30

धन्यवाद । मैं करने में सक्षम था इस का उपयोग करने के लिए सेट करें डिफ़ॉल्ट मूल्य पर प्रपत्र फ़ील्ड के साथ त्रिगुट: 'currentTeam' in userData ? userData.currentTeam.teamName: 'No Team Set'
Rafael Zasas

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में