Typescript는 6가지 원칙에 중점을 두고 그동안 발전해 왔다.
Typescript를 사용하면 아래와 같은 여러 가지 기능들을 사용할 수 있다.
정적 유형은 깊은 조력자이다. 안전한 리팩토링을 가능하게 한다.
Stackoverflow에서 2021년 기준 Typescript는 7위를 차지하고 있다.
또한, 언어의 성장세는 매년 엄청나게 증가 중이다.
Typescript는 Community에 많은 신경을 썼다.
Typescript가 커뮤니티에 신경을 많이 쓴 예들을 소개하고자 한다.
Typescript는 검사기이자 트랜스 파일러 이기 때문에, 새로운 트랜스 파일러로 옮기고 싶지 않았다. 그러나 커뮤니티 의견에 따라서 빌드 파이프라인으로 바벨을 사용할 수 있도록 바벨과 협력했다. 이제 Babel의 preset-typescript을 사용하여 JS 파일을 생성한 후, TypeScript를 사용하여 타입 검사 및 .d.ts 파일을 생성하는 복합 접근 방식이 가능하다.
TSLint를 구축해서 사용해왔다. 인기도 많았다. 하지만, Ecmascript 커뮤니티는 ESLint로 수렴하고 있었고, 실제로 두 개의 Lint가 있다는 것은 이치에 맞지 않았다. 그래서 TSLint를 포기하고 TSLint 기여자들이 ESLint에 참여해서 완전한 전환을 이뤄냈다.
사실 Typescript 내에서 처리하면 중복된 AST 과정이 사라져서 성능의 이점이 있을 순 있으나 커뮤니티를 택했다.
DefinitelyTyped
정확히 Typescript를 오픈소스로 전환한 지 3일 뒤에, 해당 레파지토리가 생성되었다. 점차 레파지토리는 커지기 시작해서 지금까지 왔다. 이 레파지토리는 많은 사람들이 모여서 지원 안 하는 패키지의 type을 만들어둔 곳이다. 공식적으로 지원하는 것이 없을 경우 여기서 찾아보면 된다. 마이크로 소프트가 무기한으로 적극적으로 참여하기로 결정한 프로젝트이기도 하다.
https://github.com/DefinitelyTyped/DefinitelyTyped
GitHub - DefinitelyTyped/DefinitelyTyped: The repository for high quality TypeScript type definitions.
The repository for high quality TypeScript type definitions. - GitHub - DefinitelyTyped/DefinitelyTyped: The repository for high quality TypeScript type definitions.
github.com
4년 동안 타입 의존성 있는 npm 패키지들은 점차 증가해서 70퍼센트에 이르렀다. 이는 타입 스크립트의 영향이 크다.
커뮤니티 구성원들의 기여로 아래와 같은 기능들이 추가가 되었다.
이전보다 더 유연한 확장, 빠른 빌드, functional 패러다임과 에러 메시지 출력 형식 등이 변화되었다.
이러한 복잡한 에러 메시지들을 개선하기 위해 아래와 같은 목적을 가지고 개선했다.
- before
- after
변경된 부분에 대해서만 재 컴파일되기 때문에 컴파일 속도가 더 빨라졌다.
Typescript를 사용하면 강력한 타입을 추천받을 수 있다.
또한, 커뮤니티의 요청으로 immutable 기능을 as const를 추가함으로써 얻을 수 있게 추가했다.
이제, 제네릭 함수에 대한 타입 유추를 할 수 있다.
옵셔널 체이닝 와 NULL 연산자 또한 자바스크립트 표준이 되었고, Typescript에서도 역시 사용할 수 있게 되었다.
- before
- after
또한, 옵셔널 체이닝은 자동으로 추천 가능하다.
함수 미호출 시 에러가 발생해서 쓰이지 않음을 알려준다.
- before
- after
중첩 객체에 대한 에러 메시지가 개선되었다.
- before
- after
JSDOC에 대해서 typescript로의 전환을 지원한다.
- JS
- Typescript
Javascript 10줄을 작성한다고 할 때, type이 필요한 이유는 무엇일까? 우리는 왜 환경 설정을 해야 하고 빌드 단계를 걸쳐야 하는가? 다소 복잡할 수 있다. 하지만, Typescript는 자동으로 타입을 얻어서 타입 정의를 로컬 캐시에 저장된다. 이 모든 것은 자동으로 된다. 따로 타입을 명시하지 않아도 이런 기능들을 얻을 수 있다는 것이다.
마지막 발표자의 소원이 있다. typescript를 사용할 때, strict mode를 사용하자.
댓글