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

이펙티브 타입스크립트 7장 #24

Open
sbyeol3 opened this issue Nov 26, 2022 · 0 comments
Open

이펙티브 타입스크립트 7장 #24

sbyeol3 opened this issue Nov 26, 2022 · 0 comments
Labels

Comments

@sbyeol3
Copy link
Collaborator

sbyeol3 commented Nov 26, 2022

53. 타입스크립트 기능보다는 ECMAScript 기능을 사용하기

  • 타입스크립트 초기 버전에는 독립적으로 개발한 기능을 포함시켰으나 시간이 흐르며 자바스크립트에 추가된 내장 기능과 호환성 문제가 발생함
  • 타입스크립트는 대부분 자바스크립트 신규 기능을 채택하고 타입스크립트 초기 버전과 호환성을 포기하는 전략을 선택

enum

  • 상수 열거형은 런타임에 완전히 제거되므로 기대하지 않은 결과를 낳음
  • 문자열 열거형은 런타임의 타입 안전성과 투명성을 제공하지만 명목적 타이핑(nominally typing)을 사용
    • 타입이 특정 enum이면 값이 같더라도 반드시 enum을 통해서 넣어야 함
    • enum 대신 리터럴 타입의 유니온을 사용하면 됨 type Flavor = 'vanilla' | 'chocolate' | 'strawberry'

매개변수 속성

  • 코드가 늘어나는 문법, 매개변수 속성은 런타임에 실제 사용되나 타입스크립트 관점에서는 사용되지 않는 것처럼 보임
  • 클래스에 매개변수 속성만 있다면 클래스 대신 인터페이스로 만들고 객체 리터럴을 사용하는 것이 좋다
  • 호불호가 갈리기는 하지만 쨌든, 매개변수 속성과 일반 속성을 같이 사용하는 건 지양하는 게 좋다

namespace, triple slash import

  • triple slash import와 module 키워드는 호환성을 위해 남아있을 뿐, ECMAScript 2015 스타일의 import, export를 사용해라

데코레이터

  • 표준이 되기 전까진 타입스크립트에서 사용하지 않는 게 좋다

54. 객체를 순회하는 노하우

  • 가장 일반적인 방법은 Object.entries
  • 키가 어떤 타입인지 정확히 알 때만 keyof T for-in을 사용

55. DOM 계층 구조 이해하기

  • DOM에는 타입 계층 구조가 있으며 브라우저 프로젝트에서 유용하게 사용됨
  • 충분히 구체적인 타입 정보를 사용해야 한다

56. 정보를 감추는 목적으로 private 사용하지 않기

  • public protected private 접근 제어자는 컴파일 후에 제거되므로 런타임에 효력이 없다. 따라서 정보를 감추기 위해 private을 사용하면 안 된다. 이에 가장 효과적인 방법은 클로저를 사용하는 것이다.
  • 또 다른 방법으로 표준화가 진행중인 비공개 필드 기능을 사용할 수 있다. 접두사 #를 붙여 타입체크, 런타임 모두 비공개로 만든다.

57. 소스맵을 사용하여 타입스크립트 디버깅하기

  • 소스맵을 사용해서 런타임에 타입스크립트 코드를 디버깅한다.
  • 소스맵에 원본 코드가 공개되지 않도록 설정을 확인해야 한다.
@sbyeol3 sbyeol3 added the book label Nov 26, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant