-
Notifications
You must be signed in to change notification settings - Fork 129
translate 4.9 "in", "auto-accessors" #192
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
Conversation
Translation of TypeScript 4.9.mdtitle: TypeScript 4.9 oneline: TypeScript 4.9 Release NotesThe
|
exists on an object. | ||
개발자들은 자주 런타임에서 알 수 없는 값을 처리해야 할 때가 있습니다. | ||
서버에서 응답받거나 설정 파일을 읽는 경우처럼 실제로 프로퍼티가 존재하는지 알 수 없는 경우가 흔하게 있습니다. | ||
JavaScript의 `in` 연산자를 활용하면 객체에 프로퍼티가 존재하는지 알 수 있습니다. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
JavaScript의 `in` 연산자를 활용하면 객체에 프로퍼티가 존재하는지 알 수 있습니다. | |
JavaScript의 `in` 연산자를 사용하면 | |
객체에 프로퍼티 존재 여부를 확인할 수 있습니다. |
라인수는 나중에 수정을 위해서 맞추는 게 좋을 것 같아요!
|
||
Previously, TypeScript allowed us to narrow away any types that don't explicitly list a property. | ||
이전에, TypeScript에서는 정의되지 않는 프로퍼티를 사용하여 타입을 좁힐 수 있었습니다. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이전에, TypeScript에서는 정의되지 않는 프로퍼티를 사용하여 타입을 좁힐 수 있었습니다. | |
이전 TypeScript 버전에서는 명시적으로 프로퍼티가 타입 목록에 없다면 범위를 좁힐 수 있었습니다. |
[제안]
Let's take the following example in JavaScript: | ||
그러나 프로퍼티가 주어진 타입이 없는 경우에는 어떨까요? | ||
그런 경우, 언어가 큰 도움이 되지 않습니다. | ||
여기 JavaScript로 된 예시를 살펴보겠습니다 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
여기 JavaScript로 된 예시를 살펴보겠습니다 | |
여기 JavaScript로 된 예시를 살펴보겠습니다. |
@@ -157,8 +156,8 @@ function tryGetPackageName(context) { | |||
} | |||
``` | |||
|
|||
Rewriting this to canonical TypeScript would just be a matter of defining and using a type for `context`; | |||
however, picking a safe type like `unknown` for the `packageJSON` property would cause issues in older versions of TypeScript. | |||
이것을 표준 Typescript로 다시 작성한다면 `context`에 대한 타입을 정의해서 사용하게 될 것입니다. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이것을 표준 Typescript로 다시 작성한다면 `context`에 대한 타입을 정의해서 사용하게 될 것입니다. | |
이것을 표준 TypeScript로 다시 작성한다면 `context` 타입을 정의해서 사용할 수 있습니다. |
Rewriting this to canonical TypeScript would just be a matter of defining and using a type for `context`; | ||
however, picking a safe type like `unknown` for the `packageJSON` property would cause issues in older versions of TypeScript. | ||
이것을 표준 Typescript로 다시 작성한다면 `context`에 대한 타입을 정의해서 사용하게 될 것입니다. | ||
하지만, `packageJSON`의 속성에 `unknown`과 같은 안전한 타입을 사용하면 이전 타입스크립트 버전들에서 문제가 발생할 수도 있습니다. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
하지만, `packageJSON`의 속성에 `unknown`과 같은 안전한 타입을 사용하면 이전 타입스크립트 버전들에서 문제가 발생할 수도 있습니다. | |
하지만 `packageJSON`의 속성에 `unknown`과 같은 안전한 타입을 사용하면 이전 TypeScript 버전에서 문제가 발생할 수 있습니다. |
@@ -167,9 +166,9 @@ interface Context { | |||
|
|||
function tryGetPackageName(context: Context) { | |||
const packageJSON = context.packageJSON; | |||
// Check to see if we have an object. | |||
// 객체가 맞는지 확인합니다. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
// 객체가 맞는지 확인합니다. | |
// 객체 여부를 확인합니다. |
@@ -130,24 +129,24 @@ interface HSV { | |||
|
|||
function setColor(color: RGB | HSV) { | |||
if ("hue" in color) { | |||
// 'color' now has the type HSV | |||
// 이제 'color' 는 HSV 타입을 갖게되었습니다. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
// 이제 'color' 는 HSV 타입을 갖게되었습니다. | |
// 이제 'color'는 HSV 타입을 갖게 되었습니다. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
갖게 되었습니다 보단,
// 이제 'color' 는 HSV 타입을 갖게되었습니다. | |
// 이제 'color'의 타입은 HSV 입니다. |
이렇게 해도 자연스러울 것 같아용 😄
In those cases, the language didn't help us much. | ||
Let's take the following example in JavaScript: | ||
그러나 프로퍼티가 주어진 타입이 없는 경우에는 어떨까요? | ||
그런 경우, 언어가 큰 도움이 되지 않습니다. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
그런 경우, 언어가 큰 도움이 되지 않습니다. | |
그런 경우, 언어는 큰 도움이 되지 않습니다. |
|
||
```js | ||
function tryGetPackageName(context) { | ||
const packageJSON = context.packageJSON; | ||
// Check to see if we have an object. | ||
// 객체가 맞는지 확인합니다. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
// 객체가 맞는지 확인합니다. | |
// 객체 여부를 확인합니다. |
@@ -183,14 +182,14 @@ function tryGetPackageName(context: Context) { | |||
} | |||
``` | |||
|
|||
This is because while the type of `packageJSON` was narrowed from `unknown` to `object`, the `in` operator strictly narrowed to types that actually defined the property being checked. | |||
As a result, the type of `packageJSON` remained `object`. | |||
이는 `packageJSON`의 타입이 `unknown`에서 `object`로 좁혀졌으나, `in` 연산자는 실제로 정의한 타입으로 엄격하게 좁혔기 때문입니다. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이는 `packageJSON`의 타입이 `unknown`에서 `object`로 좁혀졌으나, `in` 연산자는 실제로 정의한 타입으로 엄격하게 좁혔기 때문입니다. | |
`packageJSON`의 타입이 `unknown`에서 `object`로 좁혀졌지만, `in` 연산자는 실제 정의한 타입으로 엄격하게 좁혔기 때문입니다. |
[제안]
This is because while the type of `packageJSON` was narrowed from `unknown` to `object`, the `in` operator strictly narrowed to types that actually defined the property being checked. | ||
As a result, the type of `packageJSON` remained `object`. | ||
이는 `packageJSON`의 타입이 `unknown`에서 `object`로 좁혀졌으나, `in` 연산자는 실제로 정의한 타입으로 엄격하게 좁혔기 때문입니다. | ||
그 결과, `packageJSON`은 `object`로 남게 되었습니다. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
그 결과, `packageJSON`은 `object`로 남게 되었습니다. | |
결과적으로 `packageJSON`의 타입은 `object`가 되었습니다. |
[제안]
|
||
TypeScript 4.9 makes the `in` operator a little bit more powerful when narrowing types that *don't* list the property at all. | ||
Instead of leaving them as-is, the language will intersect their types with `Record<"property-key-being-checked", unknown>`. | ||
TypeScript 4.9는 프로퍼티가 전혀 정의되지 _않은_ 타입을 좁힐 때, `in` 연산자를 사용하여 조금 더 강력하게 만듭니다. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
TypeScript 4.9는 프로퍼티가 전혀 정의되지 _않은_ 타입을 좁힐 때, `in` 연산자를 사용하여 조금 더 강력하게 만듭니다. | |
TypeScript 4.9는 프로퍼티가 전혀 정의되지 _않은_ 타입으로 좁힐 때, `in` 연산자를 사용하여 조금 더 강력하게 만듭니다. |
TypeScript 4.9 makes the `in` operator a little bit more powerful when narrowing types that *don't* list the property at all. | ||
Instead of leaving them as-is, the language will intersect their types with `Record<"property-key-being-checked", unknown>`. | ||
TypeScript 4.9는 프로퍼티가 전혀 정의되지 _않은_ 타입을 좁힐 때, `in` 연산자를 사용하여 조금 더 강력하게 만듭니다. | ||
이전과는 다르게, 언어는 `Record<"property-key-being-checked", unknown>`과 타입을 교차합니다. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이전과는 다르게, 언어는 `Record<"property-key-being-checked", unknown>`과 타입을 교차합니다. | |
이전과는 차이는 없지만, 언어 내부적으로 `Record<"property-key-being-checked", unknown>` 타입을 교차합니다. |
|
||
So in our example, `packageJSON` will have its type narrowed from `unknown` to `object` to `object & Record<"name", unknown>` | ||
That allows us to access `packageJSON.name` directly and narrow that independently. | ||
따라서 위 예시에서, `packageJSON`는 `unknown`에서 `object`로 그다음 `object & Record<"name", unknown>`로 타입이 좁혀집니다. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
따라서 위 예시에서, `packageJSON`는 `unknown`에서 `object`로 그다음 `object & Record<"name", unknown>`로 타입이 좁혀집니다. | |
따라서 위 예시에서, `packageJSON` 타입은 `unknown`에서 `object`로 그다음 `object & Record<"name", unknown>`로 타입이 좁혀집니다. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
[제안]
@@ -199,11 +198,11 @@ interface Context { | |||
|
|||
function tryGetPackageName(context: Context): string | undefined { | |||
const packageJSON = context.packageJSON; | |||
// Check to see if we have an object. | |||
// 객체가 맞는지 확인합니다. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
// 객체가 맞는지 확인합니다. | |
// 객체 여부를 확인합니다. |
if ("name" in packageJSON && typeof packageJSON.name === "string") { | ||
// Just works! | ||
// 동작! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
// 동작! | |
// 정상 동작합니다! |
[제안]
@@ -212,15 +211,15 @@ function tryGetPackageName(context: Context): string | undefined { | |||
} | |||
``` | |||
|
|||
TypeScript 4.9 also tightens up a few checks around how `in` is used, ensuring that the left side is assignable to the type `string | number | symbol`, and the right side is assignable to `object`. | |||
This helps check that we're using valid property keys, and not accidentally checking primitives. | |||
TypeScript 4.9는 또한 `in`의 검사를 강화하여 left side에는 `string | number | symbol`, right side에는 `object`로만 할당할 수 있도록 보증합니다. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
TypeScript 4.9는 또한 `in`의 검사를 강화하여 left side에는 `string | number | symbol`, right side에는 `object`로만 할당할 수 있도록 보증합니다. | |
또한 TypeScript 4.9는`in`의 사용성에서 확인하는 부분을 강화하여 왼쪽에는 `string | number | symbol`, 오른쪽에는 `object`로만 할당할 수 있도록 보장합니다. |
[제안]
TypeScript 4.9 also tightens up a few checks around how `in` is used, ensuring that the left side is assignable to the type `string | number | symbol`, and the right side is assignable to `object`. | ||
This helps check that we're using valid property keys, and not accidentally checking primitives. | ||
TypeScript 4.9는 또한 `in`의 검사를 강화하여 left side에는 `string | number | symbol`, right side에는 `object`로만 할당할 수 있도록 보증합니다. | ||
이는 유효한 프로퍼티 키를 사용했는지, 실수로 프리미티브를 검증하고 있는지 확인하는 데 도움이 됩니다. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이는 유효한 프로퍼티 키를 사용했는지, 실수로 프리미티브를 검증하고 있는지 확인하는 데 도움이 됩니다. | |
이를 이용해서 프로퍼티 키가 유효한지, 실수로 프리미티브 검증을 놓쳤는 지 확인할 수 있습니다. |
[제안]
번역 감사합니다! 참고로 영어에는 접속사가 자주 사용되는데, |
LGTM |
Merging because @bumkeyy is a code-owner of all the changes - thanks! |
No description provided.