섹션 7의 Type argument 타입 제한에 대해 좀 더 설명을 해주실 수 있을까요?
extends로 타입을 제한하면 string이나 number가 아닌 해당 값으로 추론되는 이유가 무엇인지 잘 와닿지 않아서요😂
제한을 하나 안 하나 제네릭에 string 혹은 number로 추론이 되어야 하지 않나 싶은데,
T extends object | [] 이렇게 제한을 걸면 string이나 number처럼 정확히 추론이 되지 않구요😂
타입스크립트는 extends로 제한을 걸면 구체적으로 추론을 해주는 이유가 뭔지 궁금하네요🤔
답변 2
0
안녕하세요 우선 답부터 말씀드리면 말씀하신대로 extends string | number 빼면 추론이 제대로 되어야 하는게 맞습니다.
T extends object | [] 이렇게 제한을 걸면 string이나 number처럼 정확히 추론이 되지 않구요 😂
정확히 추론이 안된다는 것이 어떤 의미인지 제가 이해를 못했지만 extends string | number 를 빼면
error1은
{
output: {
a: number
}
}로 추론이 되고,
error2 는
{
output: number[]
}로 추론이 되네요.
이 문제의 의도는 inferItemLiteral 에 string 또는 number만 허용하고 나머지 타입들은 허용하지 않게 하는게 목적이었습니다. 그래서 그런 타입 제한을 하게 된 것입니다. (노란색 사각형 영역처럼 object나 array 넘기면 타입 에러가 발생하도록)

1
넵 문제의 의도는 이해했습니다🙂
제가 의문스러운 건
<T extends object | [...any]> ...
const result1 = inferItemLiteral([1,2,3]) // { output: number[] }
const result2 = inferItemLiteral({aaa:'abcd'}); // { output: { aaa: string } }
{ output: [1,2,3] }으로 기대했는데 { output: number[] }가 결과값으로 나온 게 왜 그런건지 궁금해서 질문을 드렸습니다🙂
강의 진도를 더 나가다보면 왜 그런지 이해가 될까요?
1
아하 질문하신 의도를 이제 알았습니다! 제가 생각나는 방법은 여러가지가 있는데
첫번째 방법
tuple로 추론하게 하고 싶은 거라면 가장 간단한 방법은 다음과 같이 할 수 있겠네요.
<T extends object | [any, ...any]>이렇게 하시면 원하는 의도대로 추론이 될 것입니다. 그런데 이 방법의 단점은
const result1 = inferItemLiteral([1,2,"hello"])위와 같이 number 뿐만 아니라 string "hello" 이 들어올 수 있게 허용해준다는 것이 있을 것 같네요.
두번째 방법
<T extends object | [...any]>
const result1 = inferItemLiteral([1,2,3] as [number, number, number])type asserts 를 이용해서 array가 아니라 명시적으로 tuple 이라는 것을 알려줄 수 있는 방법도 있습니다.
세번째 방법
<T extends object | [...any]>
const error2 = inferItemLiteral([1, 2] as const);뒤에 as const 를 붙이게 되면 두번째 방법보다 더욱 쉽게 해결할 수 있겠네요
이게 된다는걸 어떻게 판단할 수 있나요?
0
62
2
연습문제 강의 확인 부탁드립니다.
0
80
2
object key 질문드립니다.
0
67
1
행운 닉네임 등록부탁드립니다!
0
137
2
각 강의에 대한 설명 링크 404에러
0
72
2
행운문제 닉네임 등록 요청드립니다
0
65
2
블로그 링크 문제
1
124
1
제네릭과 사용자 정의 타입 가드에 관한 질문
1
168
1
제네릭 타입 제한을 하는것이 어떤 장점이 있을까요 ?
1
142
1
행운문제 닉네임 등록 신청합니다!
0
113
2
행운문제 테스트 유저 이름 입력 요청
0
129
2
행운문제 닉네임 입력 요청
1
158
2
행운문제 테스트 유저 이름 입력 요청
1
141
2
설명 블로그에 대한 질문
2
129
3
행운동전!
0
115
2
행운문제 테스트 유저 이름 입력 요청
0
122
1
행운 테스트 문제 400 에러
0
177
2
행운 테스트 문제 (존재하지 않는 유저입니다.)
1
203
2
행운테스트 동전이용!!
0
209
2
연습문제 링크 이슈
2
223
3
화살표 함수와 일반 함수의 매개변수 추론 관련
1
311
2
제네릭을 활용해서 정답을 맞춰보았습니다!
1
334
2
cache 강의 질문
1
213
1
Record의 제네릭은 자동적으로 바뀌나요?
0
383
2





