prgrms-web-devcourse / FEDC4-TypeScript2-Study

이펙티브 타입스크립트 빠르게 읽기 🦅
3 stars 1 forks source link

[2023.9.5] 아이템 37~52장 퀴즈 제출 #4

Open suehdn opened 1 year ago

suehdn commented 1 year ago

데브코스 4기 프롱이들 이펙티브 타입스크립트 완독하기 🤩

아래 템플릿을 복사해서 퀴즈를 만들어주세요. 객관식, 주관식, 단답형 모두 상관없습니다!

Q. 퀴즈 내용
1.  1번
2.  2번
3.  3번

<details>
<summary>퀴즈 정답</summary>
<div markdown="1">    
정답 설명
</div>
</details>
suehdn commented 1 year ago

Q. 다음 코드의 지정된 위치 중 오류가 발생하는 부분을 찾아 이유를 적어주시고 오류가 발생하지 않는 부분의 type를 추론해주세요.

function typescript(start:number,limit:number){
  const item = [];
  if (start === limit){
    item; -(1)
  }
  for(let i = start; i< limit; i++){
    item.push(i);
  }
  item; -(2)

  item.push('2');

  return item; -(3)
}
퀴즈 정답 (1) error 발생. 암시적 any 상태일 때 값을 읽으려 하면 오류가 발생함
(2) number[]
(3) (string | number)[]
GBAJS754 commented 1 year ago

Q. x의 타입을 추론해주세요

interface Foo { foo: string; }
interface Bar { bar: string; }

declare function expressionReturningFoo(): Foo;
function processBar(b: Bar) { /* ... */ }
function f1() {
  const x: any = expressionReturningFoo();  
  processBar(x);
  return x // -(1)
}

function f2() {
  const x = expressionReturningFoo();
  processBar(x as any);  
  return x // -(2)
}
퀴즈 정답
1. any 2. Foo
juyeon-park commented 1 year ago

Q. 아래 코드를 조건부 타입을 사용해 반환 타입을 좀 더 정교하게 변경해주세요

function square<T extends number| string>(x: T): T;
function square(x: any){
   return x**2;
}

const x = square(10);
퀴즈 정답
```typescript function square(x: T): T extends string ? string : number; function square(x: any){ return x**2; } const x = square(10); ```
jonghyunlee95 commented 1 year ago

Q. OX 퀴즈

  1. 타입 단언문은 일반적으로 타입을 위험하게 만들기 때문에 절대 사용해서는 안된다.
  2. 타입을 안전하게 지키기 위해서 암시적 any를 진화시키는 방법보다 명시적 타입 구문을 사용하는 것이 더 좋은 설계이다.
  3. 사용자가 타입 단언문이나 타입 체크를 사용하도록 강제하려면 any타입을 사용하면 된다.
퀴즈 정답
1. X - 타입 단언문은 일반적으로 타입을 위험하게 만들지만 상황에 따라 필요하기도 하고, 현실적인 해결책이 될 수 있다.
2. O
3. X - 사용자가 타입 단언문이나 타입 체크를 사용하도록 강제하려면 unknown타입을 사용하면 된다.
leeminhee119 commented 1 year ago

Q.

  1. unknown 타입은 어떠한 타입으로도 할당 가능하다. (O / X)
  2. never 타입은 어떠한 타입에도 할당할 수 없다. (O / X)
  3. 아래의 타입들(주석)이 반환되도록 double함수의 타입을 조건부 타입을 사용하여 선언해주세요.
function double // ???
function double(x: any) { return x + x; };

const num = double(12);  // number 타입이 되어야 합니다.
const str = double('x'); // string 타입이 되어야 합니다.
function f(x: number|string) {  // function f(x: string | number): string | number 타입이 되어야 합니다.
  return double(x);
}
퀴즈 정답
1. X (unknown은 오직 unknown과 any에만 할당 가능하다.)
2. X (never는 어떠한 타입으로도 할당 가능하다.)
3. ```typescript function double(x: T): T extends string ? string : number; ```
eeseung commented 1 year ago

Q. OX 퀴즈

  1. 타입스크립트로 작성된 라이브러리는 타입 선언을 DefinitelyTyped에 공개하는 것이 좋다.
  2. 콜백 함수에서 this를 사용해야 한다면 타입 정보를 명시해야 한다.
  3. 조건부 타입보다 오버로딩 타입을 사용하는 것이 좋다.
퀴즈 정답
1. X, 타입스크립트로 작성된 라이브러리는 타입 선언을 자체적으로 포함하고, 자바스크립트로 작성된 라이브러리는 타입 선언을 DefinitelyTyped에 공개하는 것이 좋다.
2. O
3. X, 오버로딩 타입보다 조건부 타입을 사용하는 것이 좋다. 조건부 타입은 추가적인 오버로딩 없이 유니온 타입을 지원한다.
suehdn commented 1 year ago

다은님

  1. any
  2. Foo

    주연님

    function square<T extends number| string>(x: T): T extends string?string:number;

    종현님

  3. X 2. O 3. X

    민희님

  4. X 2. O 3. <T extends number| string>(x: T): T extends string?string:number;

    승희님

  5. O 2. O 3. X
jonghyunlee95 commented 1 year ago

혜수님 문제

  1. 에러, item의 type이 any인데 값을 참조하려고 해서
  2. number[]
  3. string | number []

다은님 문제

  1. any
  2. foo

주연님 문제

function square<T extends number| string>(x: T): T extends string ? string : number;

민희님 문제

  1. X
  2. O
    function double<T extends number | string>(x: T): T extends string ? string : number;

    승희님 문제

  3. X
  4. O
  5. X
juyeon-park commented 1 year ago

혜수님 문제

에러, number[], string | number[]

다은님 문제

any, Foo

종현님 문제

xox

민희님 문제

xx function double<T extends number|string>(x: T): T extends string ? string : number

승희님 문제

oox

leeminhee119 commented 1 year ago

혜수님 문제 (1) - 암시적 any 타입인 item 을 사용하려 했기 때문에 (아직 할당하지 않은 상태라 any) (2) number[] (3) (string | number) []

다은님 문제 (1) any (2) Foo

주연님 문제

function square<T extends number | string>(x: T): T extends string ? string : number;
function square(x: any){
   return x**2;
}

종현님 문제

  1. X
  2. O
  3. X

승희님 문제

  1. O (X, 타입스크립트로 작성된 건 타입 선언을 자체적으로 포함, 타입스크립트 -> 자바스크립트)
  2. O
  3. X
eeseung commented 1 year ago

혜수님 퀴즈

  1. 에러
  2. number[]
  3. (string | number) []

다은님 퀴즈

  1. any
  2. Foo

주연님 퀴즈

  function square<T extends number | string>(x: T): T extends string ? string : number;

종현님 퀴즈

  1. X
  2. O
  3. X

민희님 퀴즈

  1. X
  2. O
  3. function double<T extends number | string>(x: T): T extends string ? string : number;
GBAJS754 commented 1 year ago

혜수님 문제

  1. 에러
  2. number[]
  3. number | string [] 주연님 문제 ?? 모르겟음돠.. 종현님 문제
  4. X
  5. O
  6. O 민희님 문제
  7. X
  8. X
  9. ?? 승희님 문제
  10. X
  11. O
  12. X ㅠㅠㅠ죄송합니다 공부 더하고오겠습니다.........