質問するログイン新規登録

回答編集履歴

2

テキスト修正

2020/09/13 15:52

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -30,8 +30,7 @@
30
30
 
31
31
  ### 備考
32
32
 
33
- 私の手元の確認ですと、
33
+ 私の手元の確認ですと、TSのバージョン `^4.0.2`  を使用して、
34
-
35
34
  ```typescript
36
35
  type T2 = [...string[], number]
37
36
  ```

1

テキスト修正

2020/09/13 15:52

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -26,4 +26,23 @@
26
26
  > この“吸収”という動作はPRの説明にも記載されており、バグではなく仕様通りの動作です。意図と異なる結果となるため戸惑う方が多そうですが、前述のようにTypeScriptではタプル型の最後以外の位置での可変長要素を(少なくとも今の段階では)サポートしませんから、やむを得ない挙動であると考えられます。
27
27
 
28
28
 
29
- 参考になれば幸いです。
29
+ 参考になれば幸いです。
30
+
31
+ ### 備考
32
+
33
+ 私の手元の確認ですと、
34
+
35
+ ```typescript
36
+ type T2 = [...string[], number]
37
+ ```
38
+ と書くと、ご質問と同じように、この行で、`TS1256: A rest element must be last in a tuple type.` のエラーになりましたが、 `string[]` を別のtypeにして
39
+
40
+ ```typescript
41
+ type A = string[]
42
+ type T2 = [...A, number]
43
+ ```
44
+ と書いた場合は、エラーになりませんでした。そして、上記のQiitaの投稿にあるとおり、"吸収" によって、`(string | number)[]` となっていることを、
45
+ ```typescript
46
+ const ary: T2 = [1,'str', 1, 1, 'str', 'str']
47
+ ```
48
+ がエラーにならないことによって確認できました。