extends 키워드에서 서브타입과 슈퍼타입 관한 질문입니다.
안녕하세요.
Pick 유틸리티에서 직접 구현하는 부분 중 extends 키워드에서 혼돈이 생겨 질문드립니다.
// 슈퍼 타입
type A = {
name: string,
age: number,
}
// 서브 타입
type B = {
name: string,
age: number,
color: string
}
type make<T, K extends keyof T> = {
[key in K]: T[key]
}
const testMake: make<B, 'name' | 'age'> = {
name: '',
age: 1,
}위에 예시처럼 type A는 슈퍼타입이고 type B는 서브타입으로 알고 있습니다.
'name' | 'age' extends 'name' | 'age' | 'color'extends 키워드의 경우 좌항이 우항 값을 포함하는지를 묻는 것인데 여기서 좌항이 서브타입이고 우항이 슈퍼타입이 된다는 것에서 혼돈이 생겼습니다.
type 별칭에서 A, B의 관계와 extends 키워드에서 좌항과 우항의 관계가 다른지 궁금합니다.
질문 끝으로 좋은 강의 만들어주셔서 감사합니다.
답변 1
1
안녕하세요 이정환입니다.
결론부터 깔끔하게 말씀드리자면, 객체 타입에서는 프로퍼티가 적은 쪽이 슈퍼 타입이 되지만, 유니언 타입에서는 연산에 참여하는 타입이 많을수록 슈퍼타입이 됩니다.
그 이유는 객체 타입에서의 프로퍼티 정의는 "이 프로퍼티가 꼭 있어야 해" 같은 제약 사항에 가깝지만, 유니언 타입으로 묶인 타입들의 정의는 "이 타입도 될 수 있어" 같은 옵션에 가깝기 때문입니다.
예시로 다음 객체 타입은 a, b, c 프로퍼티가 존재해야 한다는 제약을 만드는 것과 같습니다.
type Obj = { a: string; b: stirng; c: string; }단면 다음 유니언 타입은 a, b, c 무엇이든 될 수 있어 라는 옵션을 설정하는 것과 같습니다.
type Union = a | b | c
따라서 결론적으로 "name" | "age" 보다는 "name" | "age" | "color"가 더 슈퍼타입입니다.
적절한 타입 찾기 React.ChangeEvent<HTMLInputElemen>
0
29
2
outDir 옵션 추가 후 컴파일 오류 질문
0
63
1
호출 시그니처 질문
0
66
2
서로소 유니언 타입이 discriminated union과 동의어 인가요?
0
75
2
조건부타입소개 중 함수오버로딩 활용 시 인수의타입과 함수의 반환값의 타입이 깨지는 문제
0
67
1
할인쿠폰 관련하여
0
159
2
프론트엔드에서의 인터페이스활용
0
94
2
안녕하세요 이정환님!
0
91
1
Node.js 설치에 관한 질문입니다.
0
79
2
함수 타입 호출 시그니처
0
58
1
35강. 모듈 보강은 라이브러리 파일을 직접 편집해야 하나요?
0
64
2
인터페이스 문법이 있는데 타입 별칭 문법은 왜 있나요?
0
118
4
마우스 호버 시 정보
0
92
2
vite으로 리액트 빌드하기를 업데이트해주세요.
1
89
2
타입가드를 만들어 사용하는 이유가 궁금합니다.
0
83
2
섹션 12가 너무 어려운데... 정상이겠죠..?
0
137
2
선생님.. 알고리즘도 강의해주시면안되나요
0
100
2
선생님은 어떻게 이런걸 아세요?
0
128
1
type: module
0
97
2
7:17초 업캐스팅 질문이있습니다!
0
76
1
슈퍼타입질문
1
63
2
프로젝트 설치
0
104
2
enum은 비원시 타입이면서 열거형 타입이 되는건가요?
0
69
2
함수는 함수타입? 객체타입??
1
95
2





