정적 타입 검사기
코드를 실행하지 않고 오류를 감지하는 것을 정적 검사(static checking)라고 합니다. 연산되는 값의 타입에 따라 오류 여부를 결정하는 것이 정적 타입 검사입니다.
타입스크립트는 프로그램 실행 전에 값의 타입에 기반해 오류가 있는지 확인합니다. 이를 정적 타입 검사기라고 부릅니다.
예를 들어 다음 예시에서는 obj
의 타입에서 오류가 발생합니다.
ts
constobj = {width : 10,height : 15 };constProperty 'heigth' does not exist on type '{ width: number; height: number; }'. Did you mean 'height'?2551Property 'heigth' does not exist on type '{ width: number; height: number; }'. Did you mean 'height'?area =obj .width *obj .; heigth
ts
constobj = {width : 10,height : 15 };constProperty 'heigth' does not exist on type '{ width: number; height: number; }'. Did you mean 'height'?2551Property 'heigth' does not exist on type '{ width: number; height: number; }'. Did you mean 'height'?area =obj .width *obj .; heigth
타입스크립트가 자바스크립트와 어떻게 연관되는지 알아보겠습니다.
구문
타입스크립트는 자바스크립트의 상위 집합(superset)입니다. 따라서 자바스크립트 구문은 타입스크립트에서 사용 가능합니다.
구문은 프로그램을 구성하기 위해 텍스트를 작성하는 방식입니다.
예를 들어 다음 코드에는 )
가 누락되어서 구문 오류가 발생합니다.
ts
let')' expected.1005')' expected.a = (4
ts
let')' expected.1005')' expected.a = (4
타입스크립트가 자바스크립트 코드의 구문 때문에 오류를 발생시키지는 않습니다. 즉, 문제없이 작동하는 자바스크립트 코드를 타입스크립트로 가져올 때 구문 오류를 걱정할 필요가 없습니다.
타입
그러나 타입스크립트는 타입 상위 집합(typed superset)입니다. 여러 타입의 값을 사용하는 방법에 대한 규칙이 추가됩니다.
앞의 obj.heigth
에서 발생한 오류는 구문 오류가 아닙니다. 값의 타입을 잘못된 방식으로 사용해서 발생한 오류입니다.
다음은 브라우저에서 실행 가능한 자바스크립트 코드이며 특정한 값을 출력합니다.
ts
console.log(4 / []);
ts
console.log(4 / []);
구문상 가능한 이 프로그램은 Infinity
를 출력합니다. 그러나 타입스크립트는 숫자를 배열로 나누는 것을 무의미한 작업으로 간주하고 오류를 발생시킵니다.
ts
The right-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type.2363The right-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type.console .log (4 /[] );
ts
The right-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type.2363The right-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type.console .log (4 /[] );
어떤 일이 일어나는지 보기 위해 숫자를 배열로 나누는 것이 가능은 합니다. 하지만 대부분의 경우 이는 프로그래밍 실수입니다. 타입스크립트의 타입 검사기는 프로그램에서 일반적인 오류를 가능한 많이 찾아내며 프로그램을 올바르게 만들도록 설계되었습니다. (타입스크립트 검사의 엄격성 정도를 설정하는 방법은 나중에 배울 것입니다.)
자바스크립트의 코드 일부를 타입스크립트로 옮기면 타입 오류가 발생할 수 있습니다. 이는 코드의 타당한 문제 때문이거나, 타입스크립트가 지나치게 보수적이어서 생긴 오류일 수 있습니다. 이러한 오류를 제거하는 다양한 타입스크립트 구문을 안내서 전체에서 확인할 수 있습니다.
런타임 작동
타입스크립트는 자바스크립트의 런타임 작동을 그대로 유지하는 프로그래밍 언어이기도 합니다. 예를 들어 자바스크립트에서 어떤 수를 0
으로 나누면 런타임 예외를 던지는 대신 Infinity
가 생성됩니다. 원칙적으로 타입스크립트는 자바스크립트 코드의 런타입 작동을 절대 변경하지 않습니다.
즉, 자바스크립트 코드를 타입스크립트로 옮기면 타입 오류가 있더라도 동일한 실행 방식을 보장합니다.
자바스크립트와 동일한 런타임 작동을 유지하는 것은 타입스크립트의 기본 약속입니다. 프로그램 작동을 멈출 수 있는 두 언어 간의 미묘한 차이에 대해 걱정할 필요가 없습니다. 자바스크립트와 타입스크립트는 서로 쉽게 전환할 수 있습니다.
지워지는 타입
타입스크립트의 컴파일러가 코드 검사를 완료하면 컴파일된 코드를 생성하기 위해 타입을 지웁니다. 즉, 코드가 컴파일되어 결과로 나온 일반 JS 코드에는 타입 정보가 없습니다.
이는 타입스크립트가 추론한 타입에 따라 프로그램 작동이 변경되지 않음을 의미합니다. 컴파일 과정에서 타입 오류가 표시될 수도 있습니다. 하지만 타입 시스템 자체는 프로그램이 실행될 때의 작동 방식에 영향을 미치지 않습니다.
마지막으로 타입스크립트는 추가 런타임 라이브러리를 제공하지 않습니다. 타입스크립트는 자바스크립트와 동일한 표준 라이브러리(또는 외부 라이브러리)를 사용합니다. 타입스크립트 관련 프레임워크를 추가로 배울 필요가 없습니다.