# TypeScript 디자인 목표
https://github.com/Microsoft/TypeScript/wiki/TypeScript-Design-Goals
# Goals
- 오류가 발생할 가능성이 있는 구조를 정적으로 식별합니다.
- 긴 코드를 위한 구조적 메커니즘을 제공합니다.
- 배포 프로그램의 런타임 오버헤드(간접적인 처리 시간 혹은 메모리)를 부과하지 않습니다.
- 깨끗하고, 자연스럽고, 인식 가능한 JavaScript 코드를 가능케 합니다.
- 구성 가능하고 쉽게 추론할 수 있는 언어를 만듭니다.
- 현재와 미래의 ECMAScript 제안을 따릅니다.
- 모든 JavaScript 코드의 런타임 동작을 유지합니다.
- 표현식 수준의 문법을 추가하는 걸 지양합니다.
- 일관되고, 완전히 삭제되고, 구조적인 타입 시스템을 사용합니다.
- 크로스 플랫폼 개발 툴이어야 합니다.
- TypeScript 1.0에서 큰 변화를 야기하지 않습니다.
# Non-Goals
- 기존 언어의 디자인을 그대로 모방합니다. 대신 JavaScript의 동작과 프로그램 작성자의 의도를 언어에서 가장 타당한 가이드로 사용합니다.
- 프로그램의 런타임 성능을 적극적으로 최적화합니다. 대신 런타임 플랫폼의 성능 특성에 적합한 자연스러운 JavaScript 코드를 만듭니다.
- 정상적이거나 "provably 올바른" 타입 시스템을 적용합니다. 대신 정확성과 생산성 사이에서 균형을 맞춥니다.
- end-to-end 빌드 파이프라인을 제공합니다. 대신 시스템을 확장 가능하게 만들어서 외부 툴이 더 복잡한 빌드 워크플로우를 만들 수 있도록 합니다.
- 프로그램에서 런타임 타입 정보를 추가 혹은 의존하거나, 타입 시스템의 결과에 기반해 다른 코드를 만듭니다. 대신 런타임 메타데이터를 필요로 하지 않는 프로그래밍 패턴을 권장합니다.
- 추가적인 런타임 기능 또는 라이브러리를 제공합니다. 대신 기존 라이브러리를 만드는 데에 TypeScript를 사용합니다.
- 유저를 놀라게 할 behaviour를 도입합니다. 대신 일반적으로 사용되는 언어에서 채택된 패턴을 충분히 고려해야 합니다.