Object 타입 변형 > Object를 Tuple로 변형 관련 질문드려요!!
Object를 Tuple로 변형관련해서 단계별로 말씀을 해주셨는데요..!
Values의 key를 반복문을 돌려서 Tuple로 만들어주는부분까지는 이해가 됐는데
type ValuesAsUnionOfTuples = {
[K in keyof Values]: [K, Values[K]];
};
다음 [keyof Values]를 해주는 부분에 대한 설명을 조금더 자세히 해주실수있을까 싶어서 문의드렸습니다!!
type ValuesAsUnionOfTuples = {
[K in keyof Values]: [K, Values[K]];
}[keyof Values];
답변 1
0
안녕하세요 simjieun님!
keyof 는 Object 타입에서만 사용할 수 있는 키워드인데요.
예를 들어,
interface Values {
foo: 'bar',
baz: 'fooz'
}
type KeyOfValues = keyof Values;
// 'foo' | 'baz'Values 의 타입에 keyof 를 사용하게 되면 KeyOfValues 라는 타입은 Values의 key (foo, baz)의 Union가 됩니다.
그래서
[K in keyof Values] 를 풀어서 설명드리면 앞서 말씀드린대로 keyof Values은 Union 타입이니까
[K in 'foo' | 'baz'] 가 되어서 Loop를 돌게 됩니다.
원하시는 답변이 되었는지 모르겠네요 😅
혹시 답변이 아직 안되셨다면 이 곳에 답글로 달아주세요!
0
굉장히 빠른답변 너무나 감사합니다 :)
[K in 'foo' | 'baz'] 가 되어서 Loop를 돌게 되는부분은 이해가되었으나
type ValuesAsUnionOfTuples = { [K in keyof Values]: [K, Values[K]]; };
이경우에는 ValuesAsUnionOfTuples의 타입이 아래와 같이 나오는데type ValuesAsUnionOfTuples = {
email: ["email", string];
firstName: ["firstName", string];
lastName: ["lastName", string];
}type ValuesAsUnionOfTuples = { [K in keyof Values]: [K, Values[K]]; }[keyof Values]; 이렇게 하면
type ValuesAsUnionOfTuples = ["email", string] | ["firstName", string] | ["lastName", string]
1번에서 [keyof Values] 이부분만 넣어주면 ValuesAsUnionOfTuples 타입에서 value만 뽑아오는게 이해가 안되서요ㅠ
{ [K in keyof Values]: [K, Values[K]]; }[keyof Values] : {}이거 다음에 []이게 오는형태가 Object의 value를 뽑아오겠다는 의미일까요?
1
네 정확하게 어려워 하시는 부분을 알겠네요.
우선
type Foo = {
"foo": "bar",
"baz": "baz"
}["foo"]이런 타입이 있다고 했을 때 Foo의 타입은 어떻게 되나요?
답은 "bar"입니다.
하지만 여기서 "foo"가 아니라 "foo" | "baz" 를 넘기게 되면 (이것과 관련된 용어는 Indexed Access Types 라고 합니다!)
답은 "bar" | "baz" 가 됩니다. (이것과 관련된 용어는 string literals 입니다!)
이게 왜 이렇게 되느냐를 말로 풀어보면
Object 타입에 특정 키로 접근하면 value type이 리턴되는 것은 알겠고, 만약에 키들의 Union 타입을 넘기게 되면 ("foo" | "baz"), 둘 중에 하나의 값으로 (foo 또는 baz) 접근하는데 결과는 foo를 넘겼다면 "bar"가, baz를 넘겼다면 "baz"가 리턴될 것이다. 어떤 값을 넘겼느냐에 따라 결과가 다른데 가능한 결과가 총 2가지이니까 결국 "bar" | "baz"가 되는 것입니다.
이게 된다는걸 어떻게 판단할 수 있나요?
0
62
2
연습문제 강의 확인 부탁드립니다.
0
80
2
object key 질문드립니다.
0
66
1
행운 닉네임 등록부탁드립니다!
0
136
2
각 강의에 대한 설명 링크 404에러
0
72
2
행운문제 닉네임 등록 요청드립니다
0
65
2
블로그 링크 문제
1
124
1
제네릭과 사용자 정의 타입 가드에 관한 질문
1
168
1
제네릭 타입 제한을 하는것이 어떤 장점이 있을까요 ?
1
141
1
행운문제 닉네임 등록 신청합니다!
0
112
2
행운문제 테스트 유저 이름 입력 요청
0
129
2
행운문제 닉네임 입력 요청
1
158
2
행운문제 테스트 유저 이름 입력 요청
1
140
2
설명 블로그에 대한 질문
2
129
3
행운동전!
0
115
2
행운문제 테스트 유저 이름 입력 요청
0
122
1
행운 테스트 문제 400 에러
0
177
2
행운 테스트 문제 (존재하지 않는 유저입니다.)
1
203
2
행운테스트 동전이용!!
0
209
2
연습문제 링크 이슈
2
223
3
화살표 함수와 일반 함수의 매개변수 추론 관련
1
310
2
제네릭을 활용해서 정답을 맞춰보았습니다!
1
333
2
cache 강의 질문
1
213
1
Record의 제네릭은 자동적으로 바뀌나요?
0
383
2





