inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

실전 연습으로 익히는 고급 타입스크립트 기술

Object 타입 변형 > Object를 Tuple로 변형 관련 질문드려요!!

해결된 질문

206

simjieun

작성한 질문수 12

1

Object를 Tuple로 변형관련해서 단계별로 말씀을 해주셨는데요..!

  1. Values의 key를 반복문을 돌려서 Tuple로 만들어주는부분까지는 이해가 됐는데

type ValuesAsUnionOfTuples = {
  [K in keyof Values]: [K, Values[K]];
};
  1. 다음 [keyof Values]를 해주는 부분에 대한 설명을 조금더 자세히 해주실수있을까 싶어서 문의드렸습니다!!

type ValuesAsUnionOfTuples = {
  [K in keyof Values]: [K, Values[K]];
}[keyof Values];

typescript

답변 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

simjieun

굉장히 빠른답변 너무나 감사합니다 :)

[K in 'foo' | 'baz'] 가 되어서 Loop를 돌게 되는부분은 이해가되었으나

  1. type ValuesAsUnionOfTuples = { [K in keyof Values]: [K, Values[K]]; };
    이경우에는 ValuesAsUnionOfTuples의 타입이 아래와 같이 나오는데

    type ValuesAsUnionOfTuples = {
    email: ["email", string];
    firstName: ["firstName", string];
    lastName: ["lastName", string];
    }

  2. type ValuesAsUnionOfTuples = { [K in keyof Values]: [K, Values[K]]; }[keyof Values]; 이렇게 하면

    type ValuesAsUnionOfTuples = ["email", string] | ["firstName", string] | ["lastName", string]

    1. 1번에서 [keyof Values] 이부분만 넣어주면 ValuesAsUnionOfTuples 타입에서 value만 뽑아오는게 이해가 안되서요ㅠ

    2. { [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

simjieun

와.. 명쾌한 답변 너무나 감사합니다!!

이제 완벽히 이해됐어요!!!😁👍

이게 된다는걸 어떻게 판단할 수 있나요?

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