|
| 1 | +--- |
| 2 | +title: Understanding Errors |
| 3 | +layout: docs |
| 4 | +permalink: /ko/docs/handbook/2/understanding-errors.html |
| 5 | +oneline: "TypeScript에서 오류를 보는 방법." |
| 6 | +--- |
| 7 | + |
| 8 | +# 오류를 이해하기 (Understanding Errors) |
| 9 | + |
| 10 | +TypeScript는 오류를 찾으면, 무엇이 잘못됐는지 가능한 자세하게 설명하려고 합니다. |
| 11 | +TypeScript의 타입 시스템은 구조적이기 때문에, 문제를 발견한 위치에 대해 자세한 설명을 제공할 수 있습니다. |
| 12 | + |
| 13 | +## 용어 (Terminology) |
| 14 | + |
| 15 | +오류 메시지에서 자주 등장하는 용어를 알면 이해하는 데 도움이 됩니다. |
| 16 | + |
| 17 | +#### _할당할 수 있는_ (_assignable to_) |
| 18 | + |
| 19 | +TypeScript는 타입이 다른 타입으로 대체할 수 있을 때 타입을 다른 타입에 _할당할 수_ 있다 라고 표현합니다. |
| 20 | +다시 말해 `고양이`는 `동물`을 대체할 수 있기 때문에 `동물`에게 _할당할 수_ 있습니다. |
| 21 | + |
| 22 | +이름에서 보이듯, 이런 관계는 `t`와 `s`의 타입을 검사하여 `t = s;`의 할당 타당성을 확인하는 데 사용됩니다. |
| 23 | +또한 두 가지 타입이 상호 작용하는 대부분의 위치에서 확인할 때에도 사용됩니다. |
| 24 | +예를 들어, 함수를 호출할 때 각 인수의 타입은 매개 변수로 선언된 유형에 _할당할 수_ 있어야 합니다. |
| 25 | + |
| 26 | +비공식적으로 `T is not assignable to S`라고 하면 TypeScript는 "_`T`와 `S`는 호환되지 않는다"_.고 말한다고 생각하면됩니다. |
| 27 | +그러나, 이것은 _방향성이 있는_ 관계라는 점에 유의하세요: `S`가 `T`에 할당될 수 있다고 해서 `T`가 `S`에 할당될 수 있는 것은 아닙니다. |
| 28 | + |
| 29 | +## 예시들 (Examples) |
| 30 | + |
| 31 | +오류 메시지의 몇 가지 예제를 살펴보고 어떤 일이 일어나고 있는지 알아보겠습니다. |
| 32 | + |
| 33 | +### 오류 정교화 (Error Elaborations) |
| 34 | + |
| 35 | +각 오류는 선행 메시지로 시작하고 때로는 더 많은 하위 메시지로 이어집니다. |
| 36 | +각 하위 메시지는 위의 메시지에 대한 "왜?" 질문에 대답하는 것으로 생각할 수 있습니다. |
| 37 | +몇 가지 예를 통해 실제로 어떻게 작동하는지 살펴보겠습니다. |
| 38 | + |
| 39 | +다음은 예제 자체보다 긴 오류 메시지를 생성하는 예입니다: |
| 40 | + |
| 41 | +```ts twoslash |
| 42 | +// @errors: 2322 |
| 43 | +let a: { m: number[] } |
| 44 | +let b = { m: [""] } |
| 45 | +a = b |
| 46 | +``` |
| 47 | + |
| 48 | +마지막 줄에서 TypeScript는 오류를 발견했습니다. |
| 49 | +오류 발생에 대한 논리는 할당이 정상인지 확인하는 논리에서 비롯됩니다: |
| 50 | + |
| 51 | +1. `b` 타입은 `a` 타입에 할당 가능한가요? 아뇨. 왜요? |
| 52 | +2. 왜냐하면 `m` 속성의 타입이 호환되지 않기 때문입니다. 왜죠? |
| 53 | +3. 왜냐하면 `b`의 `m` 속성(`string[]`)은 `a`의 `m` 속성(`number[]`)에 할당할 수 없기 때문입니다. 왜죠? |
| 54 | +4. 한 배열의 요소 타입(`string`)을 다른 타입(`number`)에 할당할 수 없기 때문입니다. |
| 55 | + |
| 56 | +### 추가 속성 (Extra Properties) |
| 57 | + |
| 58 | +```ts twoslash |
| 59 | +// @errors: 2322 |
| 60 | +type A = { m: number } |
| 61 | +const a: A = { m: 10, n: "" } |
| 62 | +``` |
| 63 | + |
| 64 | +### 유니언 할당 (Union Assignments) |
| 65 | + |
| 66 | +```ts twoslash |
| 67 | +// @errors: 2322 |
| 68 | +type Thing = "none" | { name: string } |
| 69 | + |
| 70 | +const a: Thing = { name: 0 } |
| 71 | +``` |
0 commit comments