Skip to content

Commit 20b7e8b

Browse files
committed
Variadic Tuple Types ๋ฒˆ์—ญ
1 parent 2c8bba7 commit 20b7e8b

File tree

1 file changed

+46
-42
lines changed

1 file changed

+46
-42
lines changed

Diff for: โ€Žpages/release-notes/typescript-4.0.md

+46-42
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,17 @@ permalink: /docs/handbook/release-notes/typescript-4-0.html
55
oneline: TypeScript 4.0 Release Notes
66
---
77

8-
## Variadic Tuple Types
8+
## ๊ฐ€๋ณ€ ์ธ์ž ํŠœํ”Œ ์œ ํ˜• (Variadic Tuple Types)
99

10-
Consider a function in JavaScript called `concat` that takes two array or tuple types and concatenates them together to make a new array.
10+
๋‘ ๊ฐœ์˜ ๋ฐฐ์—ด ํ˜น์€ ํŠœํ”Œ ํƒ€์ž…์„ ์—ฐ๊ฒฐํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋งŒ๋“œ๋Š” JavaScript์˜ `concat` ํ•จ์ˆ˜์— ๋Œ€ํ•ด์„œ ์ƒ๊ฐํ•ด๋ด…์‹œ๋‹ค.
1111

1212
```js
1313
function concat(arr1, arr2) {
1414
return [...arr1, ...arr2];
1515
}
1616
```
1717

18-
Also consider `tail`, that takes an array or tuple, and returns all elements but the first.
18+
๋˜ํ•œ, ๋ฐฐ์—ด์ด๋‚˜ ํŠœํ”Œ์„ ๋ณ€์ˆ˜๋กœ ์ž…๋ ฅ๋ฐ›์•„ ์ฒซ ๋ฒˆ์งธ ์›์†Œ๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ์›์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋Š” `tail` ํ•จ์ˆ˜์— ๋Œ€ํ•ด์„œ๋„ ์ƒ๊ฐํ•ด๋ด…์‹œ๋‹ค.
1919

2020
```js
2121
function tail(arg) {
@@ -24,9 +24,9 @@ function tail(arg) {
2424
}
2525
```
2626

27-
How would we type either of these in TypeScript?
27+
TypeScript์—์„œ๋Š” ์ด ๋‘ ํ•จ์ˆ˜์˜ ํƒ€์ž…์„ ์–ด๋–ป๊ฒŒ ์ •์˜ํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”?
2828

29-
For `concat`, the only valid thing we could do in older versions of the language was to try and write some overloads.
29+
`concat`์˜ ๊ฒฝ์šฐ, ์ด์ „ ๋ฒ„์ „์—์„œ๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์˜ค๋ฒ„๋กœ๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์œ ์ผํ–ˆ์Šต๋‹ˆ๋‹ค.
3030

3131
```ts
3232
function concat(arr1: [], arr2: []): [];
@@ -38,8 +38,8 @@ function concat<A, B, C, D, E>(arr1: [A, B, C, D, E], arr2: []): [A, B, C, D, E]
3838
function concat<A, B, C, D, E, F>(arr1: [A, B, C, D, E, F], arr2: []): [A, B, C, D, E, F];)
3939
```
4040

41-
Uh...okay, that's...seven overloads for when the second array is always empty.
42-
Let's add some for when `arr2` has one argument.
41+
์Œ... ๋„ค, ๋‘ ๋ฒˆ์งธ์˜ ๋ฐฐ์—ด์ด ํ•ญ์ƒ ๋น„์–ด์žˆ๋Š” ๊ฒฝ์šฐ ์ž‘์„ฑ๋œ 7๊ฐœ์˜ ์˜ค๋ฒ„๋กœ๋“œ๋“ค์ž…๋‹ˆ๋‹ค.
42+
์ด๋•Œ, `arr2`๊ฐ€ ํ•˜๋‚˜์˜ ์ธ์ž๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ์ถ”๊ฐ€ํ•ด๋ด…์‹œ๋‹ค.
4343

4444
<!-- prettier-ignore -->
4545
```ts
@@ -52,26 +52,27 @@ function concat<A1, B1, C1, D1, E1, A2>(arr1: [A1, B1, C1, D1, E1], arr2: [A2]):
5252
function concat<A1, B1, C1, D1, E1, F1, A2>(arr1: [A1, B1, C1, D1, E1, F1], arr2: [A2]): [A1, B1, C1, D1, E1, F1, A2];
5353
```
5454

55-
We hope it's clear that this is getting unreasonable.
56-
Unfortunately, you'd also end up with the same sorts of issues typing a function like `tail`.
55+
์ด๊ฒƒ์ด ์ง€๋‚˜์น˜๋‹ค๋Š” ๊ฒƒ์ด ๋ถ„๋ช…ํ•ด์ง€๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.
56+
์•ˆํƒ€๊น๊ฒŒ๋„, `tail`๊ณผ ๊ฐ™์€ ํ•จ์ˆ˜๋ฅผ ํƒ€์ดํ•‘ํ•  ๋•Œ ์ด์™€ ๊ฐ™์€ ๋น„์Šทํ•œ ์ข…๋ฅ˜์˜ ๋ฌธ์ œ์— ์ง๋ฉดํ•˜๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
5757

58-
This is another case of what we like to call "death by a thousand overloads", and it doesn't even solve the problem generally.
59-
It only gives correct types for as many overloads as we care to write.
60-
If we wanted to make a catch-all case, we'd need an overload like the following:
58+
59+
์ด๊ฒƒ์€ "์ฒœ ๊ฐœ์˜ ์˜ค๋ฒ„๋กœ๋“œ๋กœ ์ธํ•œ ์ฃฝ์Œ(death by a thousand overloads)"์ด๋ผ๊ณ  ๋ถ€๋ฅด๊ณ  ์‹ถ์€ ๋˜๋‹ค๋ฅธ ๊ฒฝ์šฐ์ด๋ฉฐ, ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์ง€๋„ ์•Š์Šต๋‹ˆ๋‹ค.
60+
์šฐ๋ฆฌ๊ฐ€ ์ž‘์„ฑํ•˜๊ณ ์žํ•˜๋Š”๋งŒํผ์˜ ์˜ค๋ฒ„๋กœ๋“œ์— ํ•œํ•ด์„œ๋งŒ ์˜ฌ๋ฐ”๋ฅธ ํƒ€์ž…์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
61+
ํฌ๊ด„์ ์ธ ์ผ€์ด์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜ค๋ฒ„๋กœ๋“œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
6162

6263
```ts
6364
function concat<T, U>(arr1: T[], arr2: U[]): Array<T | U>;
6465
```
6566

66-
But that signature doesn't encode anything about the lengths of the input, or the order of the elements, when using tuples.
67+
๊ทธ๋Ÿฌ๋‚˜ ํ•ด๋‹น ์‹œ๊ทธ๋‹ˆ์ฒ˜๋Š” ํŠœํ”Œ์„ ์‚ฌ์šฉํ•  ๋•Œ ์ž…๋ ฅ์˜ ๊ธธ์ด๋‚˜ ์š”์†Œ์˜ ์ˆœ์„œ์— ๋Œ€ํ•œ ์–ด๋–ค ๊ฒƒ๋„ ์ธ์ฝ”๋”ฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
6768

68-
TypeScript 4.0 brings two fundamental changes, along with inference improvements, to make typing these possible.
69+
TypeScript 4.0์€ ์ถ”๋ก  ๊ฐœ์„ ๊ณผ ํ•จ๊ป˜ ๋‘ ๊ฐ€์ง€ ํ•ต์‹ฌ์ ์ธ ๋ณ€ํ™”๋ฅผ ๊ฐ€์ ธ์™€ ์ด๋Ÿฌํ•œ ํƒ€์ดํ•‘์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
6970

70-
The first change is that spreads in tuple type syntax can now be generic.
71-
This means that we can represent higher-order operations on tuples and arrays even when we don't know the actual types we're operating over.
72-
When generic spreads are instantiated (or, replaced with a real type) in these tuple types, they can produce other sets of array and tuple types.
71+
์ฒซ ๋ฒˆ์งธ ๋ณ€ํ™”๋Š” ํŠœํ”Œ ํƒ€์ž… ๊ตฌ๋ฌธ์˜ ํ™•์žฅ ์—ฐ์‚ฐ์ž์—์„œ ์ œ๋„ˆ๋ฆญ ํƒ€์ž…์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค.
72+
์ด ๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ ์ž‘๋™ํ•˜๋Š” ์‹ค์ œ ํƒ€์ž…์„ ๋ชจ๋ฅด๋”๋ผ๋„ ํŠœํ”Œ๊ณผ ๋ฐฐ์—ด์— ๋Œ€ํ•ด ๊ณ ์ฐจํ•จ์ˆ˜๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค.
73+
์ด๋Ÿฌํ•œ ํŠœํ”Œ ํƒ€์ž…์—์„œ ์ œ๋„ˆ๋ฆญ ํ™•์žฅ ์—ฐ์‚ฐ์ž๊ฐ€ ์ธ์Šคํ„ด์Šคํ™”(ํ˜น์€, ์‹ค์ œ ํƒ€์ž…์œผ๋กœ ๋Œ€์ฒด)๋˜๋ฉด ๋˜๋‹ค๋ฅธ ๋ฐฐ์—ด์ด๋‚˜ ํŠœํ”Œ ํƒ€์ž… ์„ธํŠธ๋ฅผ ์ƒ์‚ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
7374

74-
For example, that means we can type function like `tail`, without our "death by a thousand overloads" issue.
75+
์˜ˆ๋ฅผ ๋“ค์–ด, `tail` ๊ฐ™์€ ํ•จ์ˆ˜๋ฅผ "์ฒœ ๊ฐœ์˜ ์˜ค๋ฒ„๋กœ๋“œ๋กœ ์ธํ•œ ์ฃฝ์Œ(death by a thousand overloads)"์ด์Šˆ ์—†์ด ํƒ€์ดํ•‘ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
7576

7677
```ts
7778
function tail<T extends any[]>(arr: readonly [any, ...T]) {
@@ -83,41 +84,41 @@ const myTuple = [1, 2, 3, 4] as const;
8384
const myArray = ["hello", "world"];
8485

8586
const r1 = tail(myTuple);
86-
// ^?
87+
// ^ = const r1: [2, 3, 4]
8788

8889
const r2 = tail([...myTuple, ...myArray] as const);
89-
// ^?
90+
// ^ = const r2: [2, 3, 4, ...string[]]
9091
```
9192

92-
The second change is that rest elements can occur anywhere in a tuple - not just at the end!
93+
๋‘ ๋ฒˆ์งธ ๋ณ€ํ™”๋Š” ๋‚˜๋จธ์ง€ ์š”์†Œ๊ฐ€ ๋๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํŠœํ”Œ์˜ ์–ด๋А ๊ณณ์—์„œ๋„ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
9394

9495
```ts
9596
type Strings = [string, string];
9697
type Numbers = [number, number];
9798

9899
type StrStrNumNumBool = [...Strings, ...Numbers, boolean];
99-
// ^?
100+
// ^ = type StrStrNumNumBool = [string, string, number, number, boolean]
100101
```
101102

102-
Previously, TypeScript would issue an error like the following:
103+
์ด์ „์—๋Š”, TypeScript๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜ค๋ฅ˜๋ฅผ ์ƒ์„ฑํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค:
103104

104105
```
105106
A rest element must be last in a tuple type.
106107
```
107108

108-
But with TypeScript 4.0, this restriction is relaxed.
109+
TypeScript 4.0์—์„œ๋Š” ์ด๋Ÿฌํ•œ ์ œํ•œ์ด ์™„ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
109110

110-
Note that in cases when we spread in a type without a known length, the resulting type becomes unbounded as well, and all the following elements factor into the resulting rest element type.
111+
๊ธธ์ด๊ฐ€ ์ •ํ•ด์ง€์ง€ ์•Š์€ ํƒ€์ž…์„ ํ™•์žฅํ•˜๋ ค๊ณ ํ•  ๋•Œ, ๊ฒฐ๊ณผ์˜ ํƒ€์ž…์€ ์ œํ•œ๋˜์ง€ ์•Š์œผ๋ฉฐ, ๋‹ค์Œ ๋ชจ๋“  ์š”์†Œ๊ฐ€ ๊ฒฐ๊ณผ์˜ ๋‚˜๋จธ์ง€ ์š”์†Œ ํƒ€์ž…์— ํฌํ•จ๋˜๋Š” ์ ์— ์œ ์˜ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.
111112

112113
```ts
113114
type Strings = [string, string];
114115
type Numbers = number[];
115116

116117
type Unbounded = [...Strings, ...Numbers, boolean];
117-
// ^?
118+
// ^ = type Unbounded = [string, string, ...(number | boolean)[]]
118119
```
119120

120-
By combining both of these behaviors together, we can write a single well-typed signature for `concat`:
121+
์ด ๋‘ ๊ฐ€์ง€ ๋™์ž‘์„ ํ•จ๊ป˜ ๊ฒฐํ•ฉํ•˜์—ฌ, `concat`์— ๋Œ€ํ•ด ํƒ€์ž…์ด ์ œ๋Œ€๋กœ ์ •์˜๋œ ์‹œ๊ทธ๋‹ˆ์ฒ˜๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
121122

122123
```ts
123124
type Arr = readonly any[];
@@ -127,20 +128,20 @@ function concat<T extends Arr, U extends Arr>(arr1: T, arr2: U): [...T, ...U] {
127128
}
128129
```
129130

130-
While that one signature is still a bit lengthy, it's just one signature that doesn't have to be repeated, and it gives predictable behavior on all arrays and tuples.
131+
ํ•˜๋‚˜์˜ ์‹œ๊ทธ๋‹ˆ์ฒ˜๊ฐ€ ์กฐ๊ธˆ ๊ธธ๋”๋ผ๋„, ๋ฐ˜๋ณตํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ํ•˜๋‚˜์˜ ์‹œ๊ทธ๋‹ˆ์ฒ˜์ผ๋ฟ์ด๋ฉฐ, ๋ชจ๋“  ๋ฐฐ์—ด๊ณผ ํŠœํ”Œ์—์„œ ์˜ˆ์ธก๊ฐ€๋Šฅํ•œ ํ–‰๋™์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
131132

132-
This functionality on its own is great, but it shines in more sophisticated scenarios too.
133-
For example, consider a function to [partially apply arguments](https://en.wikipedia.org/wiki/Partial_application) called `partialCall`.
134-
`partialCall` takes a function - let's call it `f` - along with the initial few arguments that `f` expects.
135-
It then returns a new function that takes any other arguments that `f` still needs, and calls `f` when it receives them.
133+
์ด ๊ธฐ๋Šฅ์€ ๊ทธ ์ž์ฒด๋งŒ์œผ๋กœ๋„ ํ›Œ๋ฅญํ•˜์ง€๋งŒ, ์กฐ๊ธˆ ๋” ์ •๊ตํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ๋„ ๋น›์„ ๋ฐœํ•ฉ๋‹ˆ๋‹ค.
134+
์˜ˆ๋ฅผ ๋“ค์–ด,[ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ถ€๋ถ„์ ์œผ๋กœ ์ ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ํ•จ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š”](https://en.wikipedia.org/wiki/Partial_application) `partialCall` ํ•จ์ˆ˜๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ด…์‹œ๋‹ค.
135+
`partialCall`์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ•จ์ˆ˜๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค. - `f`๊ฐ€ ์˜ˆ์ƒํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ์ธ์ˆ˜์™€ ํ•จ๊ป˜ `f`๋ผ๊ณ  ์ง€์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
136+
๊ทธ ํ›„, `f`๊ฐ€ ์—ฌ์ „ํžˆ ํ•„์š”๋กœํ•˜๋Š” ๋‹ค๋ฅธ ์ธ์ˆ˜๋ฅผ ๊ฐ€์ง€๊ณ , ๊ทธ๊ฒƒ์„ ๋ฐ›์„ ๋•Œ `f`๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์ƒˆ๋กœ์šด ํ•จ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
136137

137138
```js
138139
function partialCall(f, ...headArgs) {
139140
return (...tailArgs) => f(...headArgs, ...tailArgs);
140141
}
141142
```
142143

143-
TypeScript 4.0 improves the inference process for rest parameters and rest tuple elements so that we can type this and have it "just work".
144+
TypeScript 4.0์€ ๋‚˜๋จธ์ง€ ํŒŒ๋ผ๋ฏธํ„ฐ๋“ค๊ณผ ํŠœํ”Œ ์›์†Œ๋“ค์— ๋Œ€ํ•œ ์ถ”๋ก  ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐœ์„ ํ•˜์—ฌ ํƒ€์ž…์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๊ณ  "๊ทธ๋ƒฅ ๋™์ž‘"ํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
144145

145146
```ts
146147
type Arr = readonly unknown[];
@@ -153,7 +154,7 @@ function partialCall<T extends Arr, U extends Arr, R>(
153154
}
154155
```
155156

156-
In this case, `partialCall` understands which parameters it can and can't initially take, and returns functions that appropriately accept and reject anything left over.
157+
์ด ๊ฒฝ์šฐ, `partialCall`์€ ์ฒ˜์Œ์— ์ทจํ•  ์ˆ˜ ์žˆ๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ํ•  ์ˆ˜ ์—†๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํŒŒ์•…ํ•˜๊ณ , ๋‚จ์€ ๊ฒƒ๋“ค์€ ์ ์ ˆํžˆ ์ˆ˜์šฉํ•˜๊ณ  ๊ฑฐ๋ถ€ํ•˜๋Š” ํ•จ์ˆ˜๋“ค์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
157158

158159
```ts
159160
// @errors: 2345 2554 2554 2345
@@ -169,26 +170,29 @@ function partialCall<T extends Arr, U extends Arr, R>(
169170
const foo = (x: string, y: number, z: boolean) => {};
170171

171172
const f1 = partialCall(foo, 100);
173+
// [Error] Argument of type 'number' is not assignable to parameter of type 'string'.
172174

173175
const f2 = partialCall(foo, "hello", 100, true, "oops");
176+
// [Error] Expected 4 arguments, but got 5.
174177

175-
// This works!
178+
// ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค!
176179
const f3 = partialCall(foo, "hello");
177-
// ^?
180+
// ^ = const f3: (y: number, z: boolean) => void
178181

179-
// What can we do with f3 now?
182+
// f3์œผ๋กœ ๋ญ˜ ํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”?
180183

181-
// Works!
184+
// ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค!
182185
f3(123, true);
183-
186+
// [Error] Expected 2 arguments, but got 0.
184187
f3();
185188

186189
f3(123, "hello");
190+
// [Error] Argument of type 'string' is not assignable to parameter of type 'boolean'.
187191
```
188192

189-
Variadic tuple types enable a lot of new exciting patterns, especially around function composition.
190-
We expect we may be able to leverage it to do a better job type-checking JavaScript's built-in `bind` method.
191-
A handful of other inference improvements and patterns also went into this, and if you're interested in learning more, you can take a look at [the pull request](https://github.com/microsoft/TypeScript/pull/39094) for variadic tuples.
193+
๊ฐ€๋ณ€ ์ธ์ž ํŠœํ”Œ ํƒ€์ž…์€ ํŠนํžˆ ๊ธฐ๋Šฅ ๊ตฌ์„ฑ๊ณผ ๊ด€๋ จํ•˜์—ฌ ๋งŽ์€ ์ƒˆ๋กœ์šด ํฅ๋ฏธ๋กœ์šด ํŒจํ„ด์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
194+
์šฐ๋ฆฌ๋Š” JavaScript์— ๋‚ด์žฅ๋œ `bind` ๋ฉ”์„œ๋“œ์˜ ํƒ€์ž… ์ฒดํ‚น์„ ๋” ์ž˜ํ•˜๊ธฐ ์œ„ํ•ด ์ด๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋ผ๊ณ  ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค.
195+
๋ช‡ ๊ฐ€์ง€ ๋‹ค๋ฅธ ์ถ”๋ก  ๊ฐœ์„  ๋ฐ ํŒจํ„ด๋“ค๋„ ์—ฌ๊ธฐ์— ํฌํ•จ๋˜์–ด์žˆ์œผ๋ฉฐ, ๊ฐ€๋ณ€ ์ธ์ž ํŠœํ”Œ์— ๋Œ€ํ•ด ๋” ์•Œ์•„๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด, [the pull request](https://github.com/microsoft/TypeScript/pull/39094)๋ฅผ ์ฐธ๊ณ ํ•ด๋ณด์„ธ์š”.
192196

193197
## Labeled Tuple Elements
194198

0 commit comments

Comments
ย (0)