feat: 가상화 문서들 추가
This commit is contained in:
+5
-5
@@ -16,7 +16,7 @@ source:
|
||||
|
||||
# TypeScript 가 검사를 놓아 주는 네 자리 — 메서드 매개변수의 bivariance · as 단언 · never 캐스트 · 검사 대상을 갖지 않은 tsconfig
|
||||
|
||||
「타입 검사가 통과했으니 반영됐다」는 판단이 이 저장소에서 네 번 틀렸다. 매번 다른 이유였다 — 메서드 매개변수의 bivariance, `as` 단언, `never` 로 받아 캐스팅하는 조립기, 그리고 검사할 파일을 갖지 않은 tsconfig 다.
|
||||
「타입 검사가 통과했으니 반영됐다」는 판단이 이 저장소에서 네 번 틀렸다. 매번 다른 이유였다 — 메서드 매개변수의 bivariance, as 단언, never 로 받아 캐스팅하는 조립기, 그리고 검사할 파일을 갖지 않은 tsconfig 다.
|
||||
|
||||
## 관계
|
||||
|
||||
@@ -25,7 +25,7 @@ source:
|
||||
- **npx tsc --noEmit 이 한 파일도 검사하지 않고 성공했다**
|
||||
검사 대상이 없는 tsconfig 가 통과시킨 사건이다.
|
||||
- **공개 Reference 가 통째로 비어 있었다**
|
||||
`as` 단언이 통과시킨 사건이다.
|
||||
as 단언이 통과시킨 사건이다.
|
||||
|
||||
## 본문
|
||||
|
||||
@@ -35,7 +35,7 @@ source:
|
||||
|
||||
「타입 검사가 통과했다」가 뜻하는 것은 컴파일러가 물은 질문에 코드가 답했다는 것이다. 이 저장소에서 네 번, 컴파일러가 물었어야 할 질문을 묻지 않았다.
|
||||
|
||||
넷은 서로 다른 방식으로 질문을 바꾼다. bivariance 는 「이 구현이 그 포트와 맞는가」를 「두 시그니처가 호환되는가」로, `as` 는 「이 이름이 그 타입에 있는가」를 작성자의 선언으로, `never` 캐스트는 「이 인자를 다 적었는가」를 검사 없음으로, 검사 대상이 없는 tsconfig 는 「이 코드가 컴파일되는가」를 대상 없음으로 바꾼다.
|
||||
넷은 서로 다른 방식으로 질문을 바꾼다. bivariance 는 「이 구현이 그 포트와 맞는가」를 「두 시그니처가 호환되는가」로, as 는 「이 이름이 그 타입에 있는가」를 작성자의 선언으로, `never` 캐스트는 「이 인자를 다 적었는가」를 검사 없음으로, 검사 대상이 없는 tsconfig 는 「이 코드가 컴파일되는가」를 대상 없음으로 바꾼다.
|
||||
|
||||
## 메서드 매개변수는 bivariant 다
|
||||
|
||||
@@ -57,7 +57,7 @@ deleteDocument(kind: "CASE" | "REFERENCE" | "QUESTION" | "CONCEPT", id: string):
|
||||
const summary = body.purposeSummary as string; // 계약에 그런 칸이 없다
|
||||
```
|
||||
|
||||
`as` 는 「이 값을 이 타입으로 다루겠다」는 선언이다. 그 이름이 응답 타입에 있는지를 컴파일러가 묻지 않고, 실행하면 `undefined` 가 나온다.
|
||||
as 는 「이 값을 이 타입으로 다루겠다」는 선언이다. 그 이름이 응답 타입에 있는지를 컴파일러가 묻지 않고, 실행하면 `undefined` 가 나온다.
|
||||
|
||||
모양이 다른 경우에는 더 나빠진다. 객체를 배열로 읽고 `.filter` 를 부르면 매핑이 통째로 터지는데, 캐스트가 그 어긋남을 타입 검사에서 가리므로 배포된 뒤에 알게 된다.
|
||||
|
||||
@@ -78,7 +78,7 @@ const summary = body.purposeSummary as string; // 계약에 그런 칸이 없
|
||||
| 무엇이 통과했나 | 무엇이 확인되지 않았나 | 어디서 드러났나 |
|
||||
|---|---|---|
|
||||
| bivariance | 구현이 네 번째 값을 다루는가 | 배포본의 서버 로그 404 |
|
||||
| `as` 단언 | 그 이름이 응답 타입에 있는가 | 공개 화면이 비어 있음 |
|
||||
| as 단언 | 그 이름이 응답 타입에 있는가 | 공개 화면이 비어 있음 |
|
||||
| `never` 캐스트 | 새 질의 인자를 조립기가 적었는가 | 페이지 번호가 안 넘어감 |
|
||||
| 검사 대상 없는 tsconfig | 이 코드가 컴파일되는가 | 운영의 ReferenceError |
|
||||
|
||||
|
||||
Reference in New Issue
Block a user