วิธีที่จะประกาศตัวแปรของพิมพ์หรือ B ตอนที่หนึ่งเพิ่มพูนอีกใน Typescript

0

คำถาม

ฉันต้องเป็นคอนเท็กซ์ผู้ให้บริกาซึ่งทั่วลำน้ำของผู้ใช้ข้อมูลทั่วทั้ง app

ฉันต้องเป็นนักเรียนส่วนติดต่อ:

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)

ฉันต้องการความช่วยเหลืค้นหาออกมาทำไมมันถึงเป็น defaulting ที่พ่อแม่ส่วนเชื่อมต่อและจะอนุญาตให้เลือกใช้ตัวเลือกของทั้งสองอย่าง

1

คำตอบที่ดีที่สุด

1

นี่คือมาตรฐานพฤติกรรมของ unions:นอกจากคุณทำบางอย่างตรวจสออะไรประเภทคุณกำลังรับมือกับ typescript จะเดียวที่อนุญาตให้คุณเรียกใช้คุณสมบัติของมันมีอยู่จริงใน ทุก สมาชิกของสมาพันธ์

ที่นี่เป็นบางตัวอย่างของยังไงคุณก็สามารถจำกัดวงของคนประเภทนี้ คุณสามารถตรวจสอบว่าทรัพย์สินที่มีอยู่:

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

หรือถ้าคุณสร้างเรียน(ซึ่งคุณอาจจะยังไม่ได้),คุณสามารถใช้ตัวอย่างขอ:

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

หรือคุณสามารถเปลี่ยนประเภทดังนั้นพวกเขาทุกคนมีทรัพย์สินที่เหมือนกันซึ่งคุณก็จะสามารถตรวจสอบเพื่อดูสิ่งที่ชนิดหนูกำลังเผชิญอยู่หรอกนะ นี่คือบางครั้งเรียกว่า"discriminated ยูเนี่ยน".

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

ขอบคุณ ฉันสามารถใช้นี่เพื่อตั้งค่าปริยายในช่องข้อมูลในฟอร์มด้ว ternary: '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ý
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่