을 선언하는 방법을 변수의 유형 A 또는 B 의 경우 하나의 확장에서 다른 타이프 라이터

0

질문

나는 컨텍스트 공급자는 사용자 데이터 스트림 응용 프로그램 전반에 걸쳐.

나는 학생이 인터페이스::

export interface Student extends User

고 싶은 공급자가 반환하는 사용자 데이터의 유형 StudentUser 다음과 같다:

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ý
..................................................................................................................