Skip to content

[6장] 고급타입 #9

Open
Open

Description

@dahye1013

[6장 퀴즈]

고급타입

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

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

예시

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

<details>
	<summary>퀴즈 정답</summary>
	<div markdown="1">    
	정답은 1번!
	</div>
</details>

Activity

  1. seojihwan commented on Aug 7, 2022

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

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

    @dahye1013
    MemberAuthor

    아래 코드의 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; }
  4. dahye1013 commented on Aug 8, 2022

    @dahye1013
    MemberAuthor

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

    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);
  5. jlee0505 commented on Aug 8, 2022

    @jlee0505
    Member

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

    1. 불변: <:T 또는 >:T 를 원함.
    2. 공변: >:T 를 원함
    3. 반변: <:T 를 원함
    4. 양변: 정확히 T를 원함.
    퀴즈 정답
    1,2,3,4
  6. jlee0505 commented on Aug 8, 2022

    @jlee0505
    Member

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

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

    퀴즈 정답
    공변, 반변
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions