수색…


소개

일반적으로 설득력있는 유형 시스템에 대한 인수를 발견하면 TypeScript에 만족하게 될 것입니다.

유형 시스템 (안전성, 가독성, 향상된 툴링)의 많은 장점을 JavaScript 생태계에 가져옵니다. 또한 유형 시스템의 단점 (복잡성과 불완전 성이 추가됨)으로 인해 어려움을 겪습니다.

비고

typed 언어와 untyped 언어의 장점은 수십 년 동안 논쟁의 대상이되었습니다. 정적 유형의 인수는 다음과 같습니다.

  1. 안전 : 유형 시스템을 사용하면 코드를 실행하지 않고도 많은 오류를 조기에 발견 할 수 있습니다. 프로그래밍 오류를 줄 이도록 TypeScript를 구성 할 수 있습니다.
  2. 가독성 : 명시 적 유형은 코드가 사람이 이해하기 쉽게 만듭니다. 프레드 브룩스 (Fred Brooks) "귀하의 플로차트를 보여주고 테이블을 감추고, 나는 계속 신비화 될 것입니다. 테이블을 보여 주면 일반적으로 플로차트가 필요하지 않을 것이며 분명해질 것입니다."
  3. 툴링 : 유형 시스템은 컴퓨터가 이해하기 쉽게 코드를 작성합니다. 이를 통해 IDE 및 linter와 같은 도구를보다 강력하게 사용할 수 있습니다.
  4. 성능 : 유형 시스템은 런타임 유형 검사의 필요성을 줄임으로써 코드 실행 속도를 향상시킵니다.

TypeScript의 출력은 형식독립적 이므로 TypeScript는 성능에 영향을주지 않습니다. TypeScript 사용에 대한 인수는 다른 세 가지 장점에 달려 있습니다.

유형 시스템에 대한 인수는 다음과 같습니다.

  1. 복잡성 추가 : 유형 시스템은 설명하는 언어 런타임보다 복잡 할 수 있습니다. 고차 함수는 올바르게 구현하기 쉽지만 입력하기는 쉽지 않습니다 . 타입 정의를 다루는 것은 외부 라이브러리 사용에 추가적인 장벽을 만든다.
  2. 추가 된 자세한 정보 : 유형 주석은 코드에 상용구를 추가하여 기본 논리를 따라 가기 어렵게 만듭니다.
  3. 느린 반복 : 빌드 단계를 도입하면 TypeScript가 편집 / 저장 / 다시로드주기를 늦추 게됩니다.
  4. 불완전 : 유형 시스템은 완전하고 완전 할 수는 없습니다. TypeScript에서 허용하지 않는 올바른 프로그램이 있습니다. TypeScript가 허용하는 프로그램에는 여전히 버그가있을 수 있습니다. 형식 시스템은 테스트의 필요성을 완화하지 못합니다. TypeScript를 사용하는 경우 새 ECMAScript 언어 기능을 사용하려면 더 오래 기다려야 할 수 있습니다.

TypeScript는 이러한 모든 문제를 해결할 수있는 몇 가지 방법을 제공합니다.

  1. 추가 된 복잡성. 프로그램의 일부를 입력하기가 너무 어려울 경우 TypeScript는 불투명 any 유형을 사용하여 크게 비활성화 할 수 있습니다. 외부 모듈에서도 마찬가지입니다.
  2. 상세 표시가 추가되었습니다. 유형의 별칭과 유형을 추론 할 수있는 TypeScript의 기능을 통해 부분적으로 해결할 수 있습니다. 명확한 코드를 작성하는 것은 과학만큼이나 기술입니다. 너무 많은 유형 주석을 제거하면 코드가 더 이상 사람이 읽을 수 없게 될 수 있습니다.
  3. 느린 반복 : 빌드 단계는 현대 JS 개발에서 비교적 일반적이며 TypeScript 는 대부분의 빌드 도구와 이미 통합되어 있습니다 . TypeScript가 오류를 일찍 잡으면 전체 반복주기를 줄일 수 있습니다!
  4. 불완전 함. 이 문제를 완전히 해결할 수는 없지만, TypeScript는 시간이 지남에 따라 더욱 풍부한 표현형 JavaScript 패턴을 포착 할 수있었습니다. 최근 예제에는 TypeScript 2.1매핑 된 유형2.2의 혼합이 포함됩니다 .

타입 시스템에 대한 논쟁은 일반적으로 TypeScript에도 똑같이 적용됩니다. TypeScript를 사용하면 새 프로젝트를 시작할 때 오버 헤드가 증가합니다. 그러나 시간이 지남에 따라 프로젝트의 규모가 커지고 참여자가 많아짐에 따라이 도구를 사용하는 전문가 (안전성, 가독성, 툴링)가 강해지고 죄수보다 중요합니다. 이것은 TypeScript의 좌우명에 반영됩니다 : "비례하는 JavaScript".

안전

TypeScript는 정적 분석을 통해 초기에 유형 오류를 포착합니다.

function double(x: number): number {
  return 2 * x;
}
double('2');
//     ~~~ Argument of type '"2"' is not assignable to parameter of type 'number'.

해독 성

TypeScript를 사용하여 편집자는 문맥에 맞는 문서를 제공 할 수 있습니다.

문자열 슬라이스 방식의 문맥 자동 완성

String.prototype.slice(start, stop) 또는 (start, length) 다시 취하는 지 결코 잊지 못할 것입니다!

압형

TypeScript는 편집자가 언어의 규칙을 알고있는 자동화 된 리팩터링을 수행 할 수있게합니다.

심볼의 이름은 변경되지만 자체 범위에서만 사용됩니다.

예를 들어, Visual Studio Code는 외부 foo 를 변경하지 않고 내부 foo 대한 참조의 이름을 바꿀 수 있습니다. 이것은 간단한 찾기 / 바꾸기로는 어려울 것입니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow