TypeScript Deep Dive
  • README
  • 시작하기
    • 왜 타입스크립트인가
  • 자바스크립트
    • 비교 연산자
    • 참조 연산자
    • Null vs. Undefined
    • this
    • 클로저
    • Number
    • Truthy
  • 미래의 자바스크립트
    • 클래스
      • 즉시실행함수
    • 화살표 함수
    • 나머지 연산자
    • let
    • const
    • 비구조화 할당
    • 전개 연산자
    • for...of
    • 이터레이터
    • 템플릿 리터럴
    • 프로미스
    • 제네레이터
    • Async Await
  • 프로젝트
    • 컴파일러 제어
      • tsconfig.json
      • 파일 경로 지정
    • 선언
    • 모듈화
      • 파일을 이용한 모듈화
      • globals.d.ts
    • 네임스페이스
    • 동적 표현식 가져오기
  • Node.js 시작하기
  • Browser 시작하기
  • 타입스크립트 타입 시스템
    • 자바스크립트 마이그레이션 가이드
    • @types
    • 주변 선언
      • 파일 선언
      • 변수
    • 인터페이스
    • 열거형(Enums)
    • lib.d.ts
    • 함수
    • 콜러블(Callable)
    • 타입 표명(Type Assertion)
    • 신선도(Freshness)
    • 타입 가드
    • 리터럴(Literal)
    • 읽기 전용(readonly)
    • 제네릭
    • 타입 인터페이스
    • 타입 호환성
    • Never 타입
    • 구별된 유니온
    • 인덱스 서명(Index Signature)
    • 타입 이동하기
    • 예외 처리
    • 믹스인(Mixin)
  • JSX
    • React
    • Non React JSX
  • Options
    • noImplicitAny
    • strictNullChecks
  • 타입스크립트 에러
    • 에러 메세지
    • 공통 에러
  • NPM
  • 테스트
    • Jest
    • Cypress
  • Tools
    • Prettier
    • Husky
    • ESLint
    • Changelog
  • 팁
    • 문자열 Enums
    • 타입 단언
    • 상태 저장 함수
    • 커링
    • 제네릭 타입 예시
    • 객체 타입 설정
    • 유용한 클래스
    • Import / Export
    • 속성 Setters
    • outFile 주의사항
    • 제이쿼리 팁
    • 정적 생성자
    • 싱글톤 패턴
    • 함수 파라미터
    • 토글 생성
    • Import 여러개 하기
    • 배열 생성
    • 생성자에서 타입정의
  • 스타일 가이드
  • 타입스크립트 컴파일러 구조
    • Program
    • AST
      • TIP: Visit Children
      • TIP: SyntaxKind enum
      • Trivia
    • Scanner
    • Parser
      • Parser Functions
    • Binder
      • Binder Functions
      • Binder Declarations
      • Binder Container
      • Binder SymbolTable
      • Binder Error Reporting
    • Checker
      • Checker Diagnostics
      • Checker Error Reporting
    • Emitter
      • Emitter Functions
      • Emitter SourceMaps
    • Contributing
Powered by GitBook
On this page
  • 런타임 오류
  • 빠른 컴파일
  • 글로벌 스코프
  • 분석이 어려움
  • 확장이 어려움
  • _references.ts
  • 코드 재사용
  • 여러 개의 타겟
  • 분리된 컴파일
  • 요약

Was this helpful?

  1. 팁

outFile 주의사항

이것의 사용이 나쁜 이유는 아래와 같습니다:

  • 런타임 오류

  • 빠른 컴파일

  • 글로벌 스코프

  • 분석이 어려움

  • 확장이 어려움

  • _references

  • 코드 재사용

  • 여러 개의 타겟

  • 분리된 컴파일

런타임 오류

코드가 어떤 식으로든 JS 순서에 영향을 받는다면 런타임에 무작위적인 오류가 발생할 수 있습니다.

  • 클래스 상속이 런타임에 깨질 수 있음.

foo.ts 를 보세요:

class Foo {

}

그리고 bar.ts:

class Bar extends Foo {

}

올바른 순서로 컴파일하지 않는다면, 예를 들어 알파벳 순으로 tsc bar.ts foo.ts, 컴파일은 잘 되지만 런타임에 ReferenceError 오류가 발생할 것입니다.

  • 모듈 분할이 런타임에 실패할 수 있음.

foo.ts 를 보세요:

module App {
    export var foo = 123;
}

그리고 bar.ts:

module App {
    export var bar = foo + 456;
}

올바른 순서로 컴파일하지 않는다면, 예를 들어 알파벳 순으로 tsc bar.ts foo.ts, 컴파일은 잘 되지만 런타임에 조용하게 실패하고 bar 는 NaN 으로 설정될 것입니다.

빠른 컴파일

--out 을 사용한 경우, 특별한 조작을 하지 않는 이상 하나의 .ts 파일이 하나의 .js 로 분리되어 생성될 수 없습니다. 결과적으로 --out 은 더 느린 점증적 빌드를 강요합니다.

또한 소스 맵은 위치에 민감해지고 런랭스(run-length) 인코딩이 되어 소스 맵을 사용하려면 (당연히 사용해야 함!) 대부분의 파일을 재컴파일로 다시 빌드해야 합니다. 라인 수가 1만 후반에서 10만 정도라면 느려질 수 밖에 없습니다.

글로벌 스코프

이름 공간을 사용할 수 있지만 브라우저에서 실행한다면 여전히 window 에 속한 것입니다. 이름 공간은 불필요한 문제 조치일 뿐입니다. 또한 /// <reference 주석이 여러분의 코드에 글로벌 컨텍스트을 추가하기 때문에 관리가 까다롭습니다.

그리고 여러분의 회사에 독립적으로 일하는 여러 개의 팀이 있고 누군가가 각 팀에서 작성한 앱을 하나로 합치게 된다면 아주 높은 확률로 이름 충돌이 발생할 수 있습니다.

분석이 어려움

우리는 더 많은 코드 분석 툴을 공급하고 싶습니다. 우리에게 종속성 체인이 제공된다면 더 쉽게 할 수 있을 것 입니다 (외부 모듈을 사용하면 이게 공짜로 깔끔하게 제공됨).

또한 코드 분석이 어려워지는 것은 개발 툴 만의 문제가 아닙니다. 다음에 오는 사람도 어떤 내용이 어디서 임포트되는지 이해하려면 많은 양의 코드 베이스를 이해해야 합니다. 내부 모듈을 사용하면 코드를 단독으로, github 같은 곳에서 리뷰할 때도 어렵습니다.

확장이 어려움

무작위적인 런타임 오류 + 느리고 느린 컴파일 시간 + 다른 사람의 코드를 이해하기 어렵기 때문입니다.

_references.ts

코드 재사용

코드의 일부를 다른 프로젝트에서 재사용하려면 모든 암묵적인 종속성을 관리해야 하므로 이식이 어렵고 런타임 오류로 이어질 가능성이 높습니다.

여러 개의 타겟

그리고 브라우저 용 코드를 (예를 들면 API 테스트 를 위해) nodejs 같은 다른 곳에서 사용하기로 했다면 모듈 시스템으로 포팅하거나 nodejs의 global 이 여러분의 글로벌 스코프 (예를 들어 window)에 대응되도록 복잡한 꼼수를 써야할 것입니다.

분리된 컴파일

파일을 분리해서 컴파일할 수 없습니다. 예를 들어, 다음의 a.ts:

module M {
  var s = t;
}

파일은 다음 형태의 b.ts 가 있는지 없는지 여부에 따라 출력이 달라질 것입니다:

module M {
  export var t = 5;
}

또는

var t = 5;

요약

--out 은 사실 빌드 툴이 해야하는 일입니다. 그런 툴일지라도 외부 모듈을 통해 제공되는 종속성 정보가 있다면 도움이 될 것입니다. 그러므로 우리는 외부 모듈을 사용하고 필요에 따라 빌드 툴이 단일 .js 를 생성하게 하는 방식을 추천합니다.

Previous속성 SettersNext제이쿼리 팁

Last updated 3 years ago

Was this helpful?

tsconfig.json : 에서 지원하지 않으며, 수동으로 files 배열의 순서를 관리해야 합니다.

그러므로 a.ts 파일은 .

The Bas Signal
https://github.com/Microsoft/TypeScript/issues/2472#issuecomment-85330803
분리해서 컴파일할 수 없습니다
https://twitter.com/nycdotnet/status/613705850574778368