-
Notifications
You must be signed in to change notification settings - Fork 132
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
translate 4.9 "in", "auto-accessors" #192
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.