

3 + [] // 숫자와 리스트 더하기
let obj = {}
obj.foo // undefined
function a(b) {
return b/2
}
a("z") // 문자열은 /2 불가
3 + [] // 에러 TS2365: '3'타입과 '[]' 타입에 연산자 '+' 적용할 수 없음
let obj = {}
obj.foo // 에러 TS2339: '{}' 타입에 'foo' 프로퍼티 존재하지 않음
function a(b: number) {
return b/2
}
a("z") // 에러 TS2345: 'number' 타입의 매개변수에 "z" 인수 타입 할당할 수 없음

TypeScript 로 작성된 코드는 바이트 코드로 컴파일 되기 전에, 먼저 JavaScript 코드로 변환되는 트랜스컴파일 과정을 먼저 거치게 되는데, 이 때 소스코드를 대상으로 '타입 검사' 를 수행하게 된다.
타입 검사를 무사히 마친 소스코드는 JavaScript 코드로 컴파일되고, 이 소스코드는 타입 오류로부터 안전한 코드가 된다. 하지만 타입 검사에서 오류가 발생하면 이를 개발자에게 알리고 컴파일이 되지 않는다.
타입 주석 및 타입 추론
정적 코드 분석을 통한 타입 검사