chap95 / TS_study

JS 와 TS 스터디
1 stars 1 forks source link

3주차_김기환 #6

Closed luceinaltis closed 3 years ago

luceinaltis commented 3 years ago

1. 다음은 타입스크립트 공식 홈페이지의 Declaration Files의 Introduction 파트 입니다. 아래 텍스트를 읽고 Declaration Files들을 구성하는 이유에 대해 작성해주세요.

스크린샷 2021-09-06 오후 5 57 06

2. 다음은 각각 타입스크립트 코드와 선언 코드입니다. 타입스크립트 코드를 읽고 선언 코드에서 적절하지 않게 선언된 부분들을 찾아 고치고 그 이유를 설명해주세요.

// 타입스크립트 코드

let result1: number = myLib.makeGreeting("world!", "oh-my-god");
let result2: number = myLib.makeGreeting("hello");

let x: Widget = getWidget(43);
let arr: Widget[] = getWidget("all of them");

greet({
  greeting: "hello world",
  duration: 4000
});

greet({
  greeting: "hello world",
});

// 선언 코드

declare namespace myLib {
  function makeGreeting(s: string): string;
  function makeGreeting(s: string): number;
}

declare function getWidget(n: number): Widget;
declare function getWidget(s: string): Widget[];

interface GreetingSettings {
  greeting: string;
  duration: number;
  color?: string;
}
declare function greet(setting: GreetingSettings): void;

3. 다음은 moment 라이브러리의 선언 파일입니다.

moment.js 깃허브 해당 파일에서 상단 부분 moment function을 declare namespace 밖에 선언하는 것의 의미를 서술해주세요.

스크린샷 2021-09-06 오후 6 38 19
heozeop commented 3 years ago
  1. 세부 구현 코드에 대한 참조 없이, 타입 추론을 사용하기 위해서 만들어냅니다.

// return 타입이 같고, 인자가 string으로 optional하게 들어갑니다.
declare namespace myLib {
  function makeGreeting(s: string, a?: string): number;
}

// duration이 optional 합니다.
interface GreetingSettings {
  greeting: string;
  duration?: number;
  color?: string;
}
  1. moment function과 moment namespace의 분리를 의미합니다.

이를 통해 moment를 callable 하게도, namespace로서도 사용이 가능합니다.

chap95 commented 3 years ago
  1. 타입만 참조 하기 위해서 사용한다.
  2. 모루겠음 ㅜㅜ
  3. declare namespace 는 내부 모듈을 정의하기 위해서 사용하는 공간이기 때문에
chap95 commented 3 years ago

3주차 종료