지금까지(So far) 런타임 에러와 같은 특정 상황에 대해 논의해 왔다. - 자바스크립트 런타임이 무언가 논리적으로 맞지 않는다고 말해주는 경우; 이런 경우들은 the ECMAScript specification이 뜻하지 않은대로 동작할 때 언어가 어떻게 행동해야할지 명시적으로 지시(instructions)했기 때문에 발생한다.
예를들면, 스펙(specification)은 호출할수 없는 무언가에 호출을 시도했을 때 error를 던지라고 말한다. 아마도 이건"납득이 가능 행동"처럼 들린다, 하지만, 오브젝트에 존재하지 않는 프로퍼티에 접근할 때 마다 에러를 던진다고 상상해보라. 대신에, 자바스크립트는 다른 동작을 제공하고, undefined값을 리턴한다:
const user = {
name: "Daniel",
age: 26,
};
user.location; // returns undefined
궁극적으로, 정적인 타입 시스템은 코드가 시스템에서 에러의 플래그가 되는 콜오버를 만들어왔다. 심지어 즉시 에러를 던지지 않는 유효한 자바스크립트 일지라도... 타입스크립트에서, 다음의 코드는 정의되지 않은 location에 대한 에러를 만든다:
const user = {
name: "Daniel",
age: 26,
};
user.location;
// Property 'location' does not exist on type '{ name: string; age: number; }'.
때떄로 이런 표현이 나중에 유효할 수 있다는걸 의미하지만, 의도는 이런 합벅적인 버그를 잡는 것이다. 타입스크립트는 많은 합법적인 버그들을 잡는다.
예를 들어: 오타,
const announcement = "Hello World!";
// How quickly can you spot the typos?
announcement.toLocaleLowercase();
announcement.toLocalLowerCase();
// We probably meant to write this...
announcement.toLocaleLowerCase();
호출되지 않은 함수,
function flipCoin() {
// Math.random()을 의미
return Math.random < 0.5;
// Operator '<' cannot be applied to types '() => number' and 'number'.
}
또는 기본적인 로직 에러들
const value = Math.random() < 0.5 ? "a" : "b";
if (value !== "a") {
// ...
} else if (value ==="b") {
//This condition will always return 'false' since the types '"a"' and '"b"' have no overlap.
// Oops, unreachable
}
'front > ts' 카테고리의 다른 글
[The Basics] Explicit Types (0) | 2022.05.16 |
---|---|
[The Basics] Emitting with Errors (0) | 2022.05.16 |
[The Basics] tsc, the TypeScript compiler (0) | 2022.05.13 |
The TypeScript Handbook (0) | 2022.05.11 |
TypeScript for JavaScript Programmers (0) | 2022.04.28 |
댓글