Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[6장] 고급타입 #9

Open
dahye1013 opened this issue Aug 5, 2022 · 6 comments
Open

[6장] 고급타입 #9

dahye1013 opened this issue Aug 5, 2022 · 6 comments

Comments

@dahye1013
Copy link
Member

dahye1013 commented Aug 5, 2022

[6장 퀴즈]

고급타입

아래 마크다운을 복사 붙여넣기해서 코멘트로 퀴즈를 달아주세요 :)
객관식, 주관식에 상관없이 편하게 만들어주세요!

부가 설명을 달고 싶다면, 해설을 정답과 함께 옵션으로 작성하시면 됩니다. ☺️

예시

퀴즈 내용 객관식의 정답을 골라보세요!
(퀴즈 내용)
1. 1번 
2. 2번
3. 3번

<details>
	<summary>퀴즈 정답</summary>
	<div markdown="1">    
	정답은 1번!
	</div>
</details>
@seojihwan
Copy link
Contributor

seojihwan commented Aug 7, 2022

  1. T 나 U 둘다 속하지 않는 타입 Exclusive<T, U>를 구현해보기
Exclusive<1 | 2 | 3, 2 | 3 | 4> // 1 | 4
퀴즈 정답 image

@yeomgahui
Copy link
Contributor

yeomgahui commented Aug 7, 2022

  1. 다음 조건부 타입에서 제네릭 타입을 인라인으로 선언하시오.
type ElementType<T> = T extends unknown[] ? T[number] : T
type A = ElementType<number[]>
퀴즈 정답
``` JS type ElementType = T extends (infer U)[] ? U : T ```

@dahye1013
Copy link
Member Author

아래 코드의 Type1, Type2은 무슨 타입일까요?

type O = {
  a: {
    b: {
      c: string;
    };
  };
};

type Type1 = keyof O; 
type Typ2 = O['a']['b']; 
퀴즈 정답
type Type1 = keyof O; // type OKeys = "a"
type Typ2 = O['a']['b']; // type Typ2 = { c: string; }

@dahye1013
Copy link
Member Author

서브타입에 대한 설명 중 올바르지 않는 것은?

  1. A,B 두 타입이 존재할 때 B가 서브타입이면, A가 필요한곳에 어디든 B를 안전하게 사용할 수 있음을 의미합니다.
  2. 타입스크립트는 모든 복합 타입-객체, 클래스, 배열, 함수, 반환 타입-은 타입에 공변(convariant)합니다. (즉, B에 할당 가능한 A 객체는 B 서브타입을 만족시켜야 합니다.)
  3. 단, 함수 매개변수 타입은 반변(contravariance) 합니다. ( 서브타입을 만족시켜야 합니다. )
  4. 슈퍼타입을 데이터를 서브타입을 매개변수로 하는 함수를 수행하면, 슈퍼타입의 타입에 변경이 생기기 때문에 타입 에러가 발생한다.
퀴즈 정답

정답은 4번! (141페이지 참조)
아래 예제에서는 existingUser에서는 슈퍼타입에 해당하는 existingUser.id가 number 타입일 것이라 기대합니다.
deleteUser 가 호출 된 후에는 id가 삭제되지만 슈퍼타입인 existingUser는 이를 알지 못합니다.
하지만, 타입스크립트는 이를 허용합니다.
타입스크립트는 완벽한 안전성을 추구하도록 설계되지 않았습니다. '실제 실수 잡는 것'과 '쉬운 사용'을 균형 있게 달성하는 것이 타입 시스템의 목표이기 때문입니다.

type ExistingUser = {
  id: number;
  name: string;
}

type NewUser = {
  name: string;
}

const deleteUser = (user: { id: number; name: string }) => {
  delete user.id;
};

const existingUser: ExistingUser = {
  id: 123456,
  name: 'Ima User',
};

deleteUser(existingUser);

@jlee0505
Copy link
Member

jlee0505 commented Aug 8, 2022

Q1. 다음중 가변성의 네 종류 중 설명이 잘못된 것은? (복수 가능)

  1. 불변: <:T 또는 >:T 를 원함.
  2. 공변: >:T 를 원함
  3. 반변: <:T 를 원함
  4. 양변: 정확히 T를 원함.
퀴즈 정답
1,2,3,4

@jlee0505
Copy link
Member

jlee0505 commented Aug 8, 2022

Q2. 아래 빈칸을 채우시오.

타입스크립트에서 모든 복합 타입의 멤버는 ___ 이며, 함수 매개변수 타입만 예외적으로 __ 이다.

퀴즈 정답
공변, 반변

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants