"JavaScript 가 한 사람 머리에 담을 수 있는 크기를 넘어섰어. TypeScript 는 그 사실을 위한 장부 정리야."
JavaScript 가 틀렸던 (그리고 맞았던) 부분
JavaScript 는 1995년에 10일 만에 설계됐어. Brendan Eich 의 임무는 — 어떤 프로그래머든 줍는 즉시 쓸 수 있고, 대충 짜도 벌받지 않고, 그냥 돌아가는 브라우저 스크립팅 언어 — 였어. 성공했어. 25년 뒤 JavaScript 는 지구의 모든 프론트엔드, 백엔드 대부분, 그리고 둘 다의 build pipeline 대부분을 돌리고 있어. 성공시킨 그 특징 — "그냥 돌아가" — 가 정확히 scale 에서 깨진 그 특징이야.
혼자 200 줄 JavaScript 쓰면 타입 없는 게 해방감이야. 다른 엔지니어 7명이랑 200,000 줄 쓰면 — 타입 없는 게 슬로우 누수야. 함수 이름 바꿔 — caller 3개가 새벽 2시 production 에서 깨져. 리턴 값을 string 에서 string-or-null 로 바꿔 — UI component 가 null 을 "null" 텍스트로 렌더해 — CEO 가 데모에서 봐. 일정 규모 넘은 모든 JavaScript codebase 에 같은 흉터가 있어.
TypeScript 는 그 에러들이 production 에 도달하기 전에 잡는 장부 정리야. Runtime 도 아니고 — compile time, 에디터 안, 코드가 돌기 전에. 비용은 앞단에서의 annotation 작업. 이득은 "어 이거 내가 생각한 거 아닌데" 류 버그가 통째로 사라지는 거야.
TypeScript 가 진짜 뭐야
TypeScript 는 JavaScript + compile 시점에 지워지는 static type system 이야. 이 문장 두 번 읽어 — 언어 전체가 한 줄에 들어가 있어. "static type system" 은 코드 돌기 전에 타입을 체크한다는 뜻. "compile 시점에 지워진다" 는 출력이 plain JavaScript, 타입은 다 떼고 나간다는 뜻. TypeScript runtime 없고, TypeScript VM 없고, TypeScript interpreter 없어. Compiler 는 JavaScript 를 만들어내는 build-time tool 이야.
Anders Hejlsberg — Microsoft 에서 C# 도 설계했고 그 전엔 Delphi/Turbo Pascal — 가 2012년에 TypeScript 원조 설계를 이끌었어. 목표는 보수적이었어: JavaScript 를 대체하지 말고, 보강해라. 유효한 JavaScript 파일은 전부 유효한 TypeScript 파일이야 (`.js` 를 `.ts` 로 rename 하면 컴파일돼). Type system 은 위에 얹히고, 바닥에선 사라져.
비용 / 이득 장부
이 Quest 가 이 lesson 으로 시작하는 이유
이 quest 의 모든 다른 lesson 은 네가 이 거래를 받아들였다는 전제로 가. 의심하면서 들어왔으면 ("그냥 JavaScript 조심해서 쓰면 안 돼?"), 우리가 쓰라는 annotation 마다 짜증날 거야. 그래서 비용 장부로 시작하는 거야. lesson 3 즈음엔 처음 `tsc` 돌리고 이 전부를 가치 있게 만드는 에러 메시지 보게 돼. lesson 6 즈음엔 네가 뭘 의도했는지 이미 아는 inference 출력을 읽고 있어. 트랙 17 즈음엔 cwkPippa frontend — 30,000 줄 TypeScript — 열어서 모든 패턴 이름 댈 수 있어. 그게 기준선이야.