回答編集履歴
2
追記
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
自己解決されたようですが、せっかく書いたので貼っておきます。
|
1
|
+
自己解決されたようですが、せっかく書いたので貼っておきます。[前の質問](https://teratail.com/questions/337107)で
|
2
2
|
|
3
3
|
|
4
4
|
|
@@ -10,7 +10,7 @@
|
|
10
10
|
|
11
11
|
|
12
12
|
|
13
|
-
がエラーにならないのは、['a', 'b', 'c'] というリテラルにはまだ型がついてない
|
13
|
+
がエラーにならないのは、['a', 'b', 'c'] というリテラルにはまだ型がついてないので、string[] にも [string, ...string[]] にもなりうるし、なんなら次のような型にも適合する、ということでしょう。
|
14
14
|
|
15
15
|
|
16
16
|
|
@@ -72,4 +72,32 @@
|
|
72
72
|
|
73
73
|
|
74
74
|
|
75
|
-
いったん string[] と型推論されてしまったら、その型は空の配列も含むので、[string, ...string[]] に自動的に変換されることはない (TypeScipr の型は静的なものなので、実行時の実際の値を型に反映させるためには、自分でその型に適合することを確認
|
75
|
+
いったん string[] と型推論されてしまったら、その型は空の配列も含むので、[string, ...string[]] に自動的に変換されることはない (TypeScipr の型は静的なものなので、実行時の実際の値を型に反映させるためには、自分でその型に適合することを確認するコードを書く必要がある) のだと思います。
|
76
|
+
|
77
|
+
|
78
|
+
|
79
|
+
具体的にはこんな感じでしょうか。
|
80
|
+
|
81
|
+
参考: [ユーザー定義のType Guard (型ガード - TypeScript Deep Dive 日本語版)](https://typescript-jp.gitbook.io/deep-dive/type-system/typeguard#yznotype-guard)
|
82
|
+
|
83
|
+
|
84
|
+
|
85
|
+
```ts
|
86
|
+
|
87
|
+
function notEmpty<T>(arg: T[]): arg is [T, ...T[]] {
|
88
|
+
|
89
|
+
return arg.length > 0;
|
90
|
+
|
91
|
+
}
|
92
|
+
|
93
|
+
|
94
|
+
|
95
|
+
const a = foo(); // foo は string[] を返すと仮定
|
96
|
+
|
97
|
+
if (notEmpty(a)) {
|
98
|
+
|
99
|
+
func(a);
|
100
|
+
|
101
|
+
}
|
102
|
+
|
103
|
+
```
|
1
誤字修正
test
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
|
11
11
|
|
12
12
|
|
13
|
-
がエラーにならないのは、['a', 'b', 'c'] というリテラルにはまだ型がついてないために、string[] にも [string, ...string[]] にもなりうるし、なんなら次のような型にも適合する、ということで
|
13
|
+
がエラーにならないのは、['a', 'b', 'c'] というリテラルにはまだ型がついてないために、string[] にも [string, ...string[]] にもなりうるし、なんなら次のような型にも適合する、ということでしょう。
|
14
14
|
|
15
15
|
|
16
16
|
|
@@ -72,4 +72,4 @@
|
|
72
72
|
|
73
73
|
|
74
74
|
|
75
|
-
いったん string[] と型推論されてしまったら、その型は空の配列も含むので、[string, ...string[]] に自動的に変換されることはない (TypeScipr の型は静的なものなので、実行時の実際の値を
|
75
|
+
いったん string[] と型推論されてしまったら、その型は空の配列も含むので、[string, ...string[]] に自動的に変換されることはない (TypeScipr の型は静的なものなので、実行時の実際の値を型に反映させるためには、自分でその型に適合することを確認して、明示的に型変換するコードを書く必要がある) のだと思います。
|