작성
·
8
0
let union2 = {
name:"",
color:"",
language:""
}
let dog:Dog;
dog = union2;
앞서 객체간의 호환성에서 슈퍼/ 서브 타입의 개념을 배웠습니다.
그러면 저렇게 유니온타입으로 두 타입의 속성값을 다 가진 타입은 어느한쪽 타입의 서브타입이 되는건가요??
답변 2
0
안녕하세요 gxpk0721님 이정환입니다.
union2 변수의 타입은 강의에서 안내드리는 Dog 타입과 Person타입의 유니온 타입으로 보이네요
이럴 경우 union2 변수의 타입은 Dog와 Person 모두의 서브 타입이 됩니다.
유니온이라는 표현이 우리 말로 교집합을 뜻하거든요 따라서 두 집합에 모두 부분집합이 되는, 바꿔 말하면 두 타입에 모두 서브 타입이 되는 그런 타입을 뜻합니다.
0
안녕하세요, 인프런 AI 인턴입니다. gxpk0721님.
타입스크립트에서 객체의 호환성 및 서브타입/슈퍼타입 개념에 대한 이해가 필요하신 것 같군요. 질문 주신 것에 대해 자세히 설명드리겠습니다.
타입스크립트에서 타입 호환성은 구조적 타이핑(Structural Typing) 개념을 따릅니다. 이는 타입의 명칭보다 구조와 형태가 중요하다는 뜻입니다. 객체가 특정 타입에 호환되는 경우 그 객체가 해당 타입의 형태를 포함해야 한다는 의미입니다.
주어진 예시 코드에서 union2
객체는 name
, color
, language
속성을 모두 가지고 있습니다. 이 객체는 유니온 타입 Dog | Person
타입에 맞게 사용될 수는 없습니다. 유니온 타입에서는 주어진 타입 중 하나의 타입만 충족하면 됩니다. 즉, Dog
타입 또는 Person
타입 중 하나여야 한다는 것입니다.
주어진 객체 union2
는 두 타입의 모든 속성을 포함하고 있기 때문에, 특정 유니온 타입의 구성 요소로 사용될 수는 있지만, 둘 중 어느 하나로 명확히 인식될 수 없어서 직접 할당이 불가능합니다. 예를 들어 dog
변수에 할당하려고 할 때, Dog
타입으로서 인식되고, Dog
타입의 정의에 맞게 구조화되어야 합니다. union2
는 language
속성을 포함하고 있어 이를 만족하지 않습니다.
따라서 union2
는 Dog
타입의 명확한 서브타입이 아니며, union2
를 dog
에 할당하는 동작은 타입스크립트에서 오류를 발생시킵니다.
구조적 타이핑: 타입스크립트에서는 타입의 구조가 일치하면 호환이 가능합니다. 그러나 유니온 타입은 여러 타입 중 하나의 타입 형태로 정확히 맞아떨어져야 한다는 점 기억하시기 바랍니다.
유니온과 인터섹션: Dog & Person
형태의 인터섹션 타입은 두 타입의 모든 속성을 포함해야 하기 때문에, union2
는 인터섹션 타입의 요구를 충족하게 됩니다.
이와 관련된 자세한 설명을 제공하는 유사한 질문과 답변을 참고하시면 좋을 것 같습니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.