Skip to content

Commit 9a22d13

Browse files
committed
reflect code review
1 parent ace961f commit 9a22d13

File tree

1 file changed

+20
-19
lines changed

1 file changed

+20
-19
lines changed

docs/documentation/ko/release-notes/TypeScript 4.9.md

+20-19
Original file line numberDiff line numberDiff line change
@@ -110,9 +110,10 @@ We'd like to thank [Oleksandr Tarasiuk](https://github.com/a-tarasyuk) who imple
110110

111111
개발자들은 자주 런타임에서 알 수 없는 값을 처리해야 할 때가 있습니다.
112112
서버에서 응답받거나 설정 파일을 읽는 경우처럼 실제로 프로퍼티가 존재하는지 알 수 없는 경우가 흔하게 있습니다.
113-
JavaScript의 `in` 연산자를 활용하면 객체에 프로퍼티가 존재하는지 알 수 있습니다.
113+
JavaScript의 `in` 연산자를 사용하면
114+
객체에 프로퍼티가 존재하는지 알 수 있습니다.
114115

115-
이전에, TypeScript에서는 정의되지 않는 프로퍼티를 사용하여 타입을 좁힐 수 있었습니다.
116+
이전 TypeScript 버전에서는 명시적으로 프로퍼티가 타입 목록에 없다면 범위를 좁힐 수 있었습니다.
116117

117118
```ts
118119
interface RGB {
@@ -129,22 +130,22 @@ interface HSV {
129130

130131
function setColor(color: RGB | HSV) {
131132
if ("hue" in color) {
132-
// 이제 'color' HSV 타입을 갖게되었습니다.
133+
// 이제 'color'의 타입은 HSV 입니다.
133134
}
134135
// ...
135136
}
136137
```
137138

138-
여기서, `RGB` 타입에 정의되지 않은 `hue`에 의해 타입이 좁혀지게 되어, `HSV` 타입이 남게 되었습니다.
139+
여기서, `RGB` 타입에 정의되지 않은 `hue`에 의해 타입이 좁혀지게 되어, `HSV` 타입이 되었습니다.
139140

140141
그러나 프로퍼티가 주어진 타입이 없는 경우에는 어떨까요?
141-
그런 경우, 언어가 큰 도움이 되지 않습니다.
142-
여기 JavaScript로 된 예시를 살펴보겠습니다
142+
그런 경우, 언어는 큰 도움이 되지 않습니다.
143+
여기 JavaScript로 된 예시를 살펴보겠습니다.
143144

144145
```js
145146
function tryGetPackageName(context) {
146147
const packageJSON = context.packageJSON;
147-
// 객체가 맞는지 확인합니다.
148+
// 객체 여부를 확인합니다.
148149
if (packageJSON && typeof packageJSON === "object") {
149150
// 문자열 타입의 name 프로퍼티를 가지고 있는지 확인합니다.
150151
if ("name" in packageJSON && typeof packageJSON.name === "string") {
@@ -156,8 +157,8 @@ function tryGetPackageName(context) {
156157
}
157158
```
158159

159-
이것을 표준 Typescript로 다시 작성한다면 `context`에 대한 타입을 정의해서 사용하게 될 것입니다.
160-
하지만, `packageJSON`속성에 `unknown`과 같은 안전한 타입을 사용하면 이전 타입스크립트 버전들에서 문제가 발생할 수도 있습니다.
160+
이것을 표준 TypeScript로 다시 작성한다면 `context` 타입을 정의해서 사용할 수 있습니다.
161+
하지만 `packageJSON`프로퍼티에 `unknown`과 같은 안전한 타입을 사용하면 이전 TypeScript 버전에서 문제가 발생할 있습니다.
161162

162163
```ts
163164
interface Context {
@@ -166,7 +167,7 @@ interface Context {
166167

167168
function tryGetPackageName(context: Context) {
168169
const packageJSON = context.packageJSON;
169-
// 객체가 맞는지 확인합니다.
170+
// 객체 여부를 확인합니다.
170171
if (packageJSON && typeof packageJSON === "object") {
171172
// 문자열 타입의 name 프로퍼티를 가지고 있는지 확인합니다.
172173
if ("name" in packageJSON && typeof packageJSON.name === "string") {
@@ -182,13 +183,13 @@ function tryGetPackageName(context: Context) {
182183
}
183184
```
184185

185-
이는 `packageJSON`의 타입이 `unknown`에서 `object`좁혀졌으나, `in` 연산자는 실제로 정의한 타입으로 엄격하게 좁혔기 때문입니다.
186-
그 결과, `packageJSON``object`로 남게 되었습니다.
186+
`packageJSON`의 타입이 `unknown`에서 `object`좁혀졌지만, `in` 연산자는 실제 정의한 타입으로 엄격하게 좁혔기 때문입니다.
187+
결과적으로 `packageJSON`의 타입은 `object` 되었습니다.
187188

188-
TypeScript 4.9는 프로퍼티가 전혀 정의되지 _않은_ 타입을 좁힐 때, `in` 연산자를 사용하여 조금 더 강력하게 만듭니다.
189-
이전과는 다르게, 언어는 `Record<"property-key-being-checked", unknown>` 타입을 교차합니다.
189+
TypeScript 4.9는 프로퍼티가 전혀 정의되지 _않은_ 타입으로 좁힐 때, `in` 연산자를 사용하여 조금 더 강력하게 만듭니다.
190+
이전과 차이는 없지만, 언어 내부적으로 `Record<"property-key-being-checked", unknown>` 타입을 교차합니다.
190191

191-
따라서 위 예시에서, `packageJSON` `unknown`에서 `object`로 그다음 `object & Record<"name", unknown>`로 타입이 좁혀집니다.
192+
따라서 위 예시에서, `packageJSON` 타입은 `unknown`에서 `object`로 그다음 `object & Record<"name", unknown>`로 타입이 좁혀집니다.
192193
이를 통해 `packageJSON.name`에 직접 접근이 가능해지고 독립적으로 좁혀집니다.
193194

194195
```ts
@@ -198,11 +199,11 @@ interface Context {
198199

199200
function tryGetPackageName(context: Context): string | undefined {
200201
const packageJSON = context.packageJSON;
201-
// 객체가 맞는지 확인합니다.
202+
// 객체 여부를 확인합니다.
202203
if (packageJSON && typeof packageJSON === "object") {
203204
// 문자열 타입의 name 프로퍼티를 가지고 있는지 확인합니다.
204205
if ("name" in packageJSON && typeof packageJSON.name === "string") {
205-
// 동작!
206+
// 정상 동작합니다!
206207
return packageJSON.name;
207208
}
208209
}
@@ -211,8 +212,8 @@ function tryGetPackageName(context: Context): string | undefined {
211212
}
212213
```
213214

214-
TypeScript 4.9는 또한 `in`검사를 강화하여 left side에는 `string | number | symbol`, right side에는 `object`로만 할당할 수 있도록 보증합니다.
215-
이는 유효한 프로퍼티 키를 사용했는지, 실수로 프리미티브를 검증하고 있는지 확인하는 데 도움이 됩니다.
215+
또한 TypeScript 4.9는`in`사용성에서 확인하는 부분을 강화하여 왼쪽에는 `string | number | symbol`, 오른쪽에는 `object`로만 할당할 수 있도록 보장합니다.
216+
이를 이용해서 프로퍼티 키가 유효한지, 실수로 프리미티브 검증을 놓쳤는지 확인할 수 있습니다.
216217

217218
더 많은 정보를 얻고 싶다면, [이를 구현한 pull request를 읽어보세요](https://github.com/microsoft/TypeScript/pull/50666)
218219

0 commit comments

Comments
 (0)