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

1장 타입스크립트 알아보기 #14

Open
humonnom opened this issue Sep 4, 2022 · 0 comments
Open

1장 타입스크립트 알아보기 #14

humonnom opened this issue Sep 4, 2022 · 0 comments
Assignees

Comments

@humonnom
Copy link
Collaborator

humonnom commented Sep 4, 2022

1장 내용요약

  • 컴파일 vs 트랜스파일
    컴파일이 더 큰 개념, 트랜스파일은 같은 고차원 언어로 변환되는 것

  • 타입스크립트 컴파일러의 역할

  • 결과물: 타입스크립트 -> 자바스크립트

    • 타입오류 체크
    • 컴파일(트랜스파일), 이때 타입관련 구문이 제거됨
  • 타입체크와 컴파일(트랜스파일)은 별개의 문제

    • 코드에 오류가 있어도 컴파일 된다 (옵션으로 핸들링)
    • 컴파일 옵션을 어떻게 쓰는지에 따라서 ts를 다르게 쓸 수 있다.
      • allowJs: .js 파일을 import할 수 있게 해줌
      • allowSyntheticDefaultImports: default imports를 쓸 수 있게 해줌
      • skipLibCheck: 모든 라이브러리의 타입을(*.d.ts) 체크하는 것이 아니라 소스코드에서 구체적으로 참조하는 대상을 체크함
      • strict: strict mode family options을 모두 적용시킴
      • forceConsistentCasingInFileNames: 프로그램에서 디스크의 케이스와 다른 케이스로 파일을 포함하려고 하면 TypeScript에서 오류가 발생합니다.(대소문자 구분)
      • noEmit: 컴파일러 출력 안함
      • esModuleInterop: 디폴트로 하면 false이고, CommonJS/AMD/UMD modules를 ES6 모듈처럼 다룬다. 이렇게 하면 (require와 import의 차이같은) mis-match로 인해 이슈가 생길 수 있다. 이 옵션을 켜면 이런 문제들을 컴파일 시에 fix 해준다.
  • 타입스크립트의 타입 시스템은 열려있다.(봉인 x)

    • js의 덕타이핑을 그대로 모델링 하기 때문인데, type에 선언된 속성만을 가질 것이라 생각할 수 있지만 그렇지 않음
    • 당황스러운 결과로 이끌 수도 있지만, 유닛 테스트에는 유리함

타입 관련 구문의 제거

트랜스파일 과정에서 삭제되는 부분

  • 인터페이스
  • 타입
  • 타입구문

타입을 명확히 하기 위한 기법 3가지

  • 특정 속성이 존재하는 지 체크
    • 특정 클래스만 가지고 있는 속성을 가지고 있는지 체크
  • 서로소 유니온 타입으로 만들기(각자 고유한 리터럴 타입 속성)
  • 타입을 클래스로 만들기

런타임 오버헤드가 아닌 빌드 타임 오버헤드

  • 타입연산자는 컴파일 시에 제거되기 때문에 런타임 이전에 처리하는 것이 늘어나는 것
@humonnom humonnom changed the title 책 1장 읽기 1장 타입스크립트 알아보기 Sep 10, 2022
@humonnom humonnom self-assigned this Sep 11, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant