제네릭에 never가 들어올 때 분배법칙
분배법칙의 작동방법 이해가 어려워 타입스크립트 교과서를 보던 중 모르는 부분이 생겨서 질문드립니다!
해당 내용은 타입스크립트 교과서 p.111에 있는 내용인데요
type R<T> = T extends string ? true : false;
type RR = R<never>; 이 코드의 설명 부분이 아래와 같이 되어 있습니다.
RR 타입이
true가 아니라never인 이유는T가never가 되면서 분배법칙이 일어났기 때문이다.
never는 공집합과 같으므로 공집합에서 분배법칙을 실행하는 것은 아무것도 실행하지 않는 것과 같다.따라서 결과는
never다.
설명이 잘 이해가 되지 않아 질문 드립니다!
분배법칙이 일어났다는 것은
never가never|never로 유니언으로 분리되서 각각 타입검사를 하게 되는건가요?그렇다면
never extends string ? true : false가 되어서 분배 되어 각각 타입검사를 해서true | true가 되고 최종적으로true가 되어야하지 않나요?공집합에서 분배법칙을 실행하는 것은 아무것도 실행하지 않는 것이라는 말이 무슨 말인지 잘 모르겠습니다..
답변 1
1
제네릭과 유니언이 만나면 분배법칙이 실행됩니다. never는 그 자체로 유니언이라서 분배법칙이 일어나나, never는 "공집합"이라서 분배할 게 없습니다. never는 그냥 never입니다. boolean같은 것이나 true | false로 쪼개지는 것이죠.
분배법칙에서는
never extends string 자체가 실행되지 않습니다. 그래서 그냥 never입니다.
그냥 편하게 never extends X 는 무조건 never라고 생각하셔도 됩니다.(never 자리가 제네릭인 경우)
데코레이터가 현재도 자주 쓰이는 문법인가요?
0
76
2
유틸리티 타입 실제로 구현은 못해도 하나씩 외우면 실무할 때 지장 없겠죠?
0
63
1
매핑 타입은 type에서밖에 안된다고 하네요?
0
62
2
자바에서의 오버로딩과 같은 개념이라고 생각해도 되나요?
0
67
2
filter 함수 반환 타입 네로잉 질문
0
68
2
map<U>(callbackfn: ....) 할때 U는 왜 여기 있는거에요??
0
44
2
ts 컴파일을 위한 type 라벨링 부분
0
44
1
concat 함수 타입 구현 중 질문 있습니다!
0
99
2
filter 메소드 질문
0
52
1
forEach 제네릭 관련 문의
0
59
1
타입 추론 시 가장 넓은 범위로 추론이 되는 건가요?
0
162
1
enum이 javascript로 트랜스파일링될때 사라진다하셨는데요
0
206
1
함수 파라미터 타입 정의 시 ...args: any[]와 ...args: any 의 차이
0
223
1
Flat type에서 ReadonlyArray 타입을 사용하는 이유?
0
157
1
bind type 질문
1
147
1
Lowercase type 관련 질문
0
151
1
key-value 타입 자동추론 질문드립니다
0
264
1
타입스크립트 교과서, p131
0
264
1
타입스크립트 교과서 p122 forEach 메서드 질문
0
231
1
타입스크립트 교과서 p116 , 코드에러남
1
268
1
타입스크립트 교과서 p112 , 코드가 안읽힙니다..
0
263
1
타입스크립트 교과서 p83
1
181
1
타입스크립트교과서 p39 쪽 코드가 이해가 안되요
1
224
1
class 에서 ts의 private vs js의 private field( # )
0
334
1





