質問編集履歴

1

説明を追加

2018/05/18 10:38

投稿

s025236
s025236

スコア27

test CHANGED
File without changes
test CHANGED
@@ -1,14 +1,6 @@
1
- 以下のコードで`$t`は`string | true | TestValue[]`だと言張ります。
1
+ TypeScript 2.8.3を利用しています。
2
2
 
3
- 当然`const $t:TestValue[] = $Test[$k];`でも型が合わなのでエラーになります。
3
+ tscが以下のコードで`$t`は`string | true | TestValue[]`だと言ります。
4
-
5
-
6
-
7
- asで型を強制したり$Test[$k]を一旦変数に入れてからisArrayすれば動くのは解ってるのですが
8
-
9
- `TestValue[]`なのは自明に見えるのに何故このような挙動になるのでしょうか?
10
-
11
-
12
4
 
13
5
  ```TypeScript
14
6
 
@@ -31,3 +23,27 @@
31
23
  }
32
24
 
33
25
  ```
26
+
27
+ 当然`const $t:TestValue[] = $Test[$k];`でも型が合わないのでエラーになります。
28
+
29
+
30
+
31
+ 以下の様に一旦変数に入れてからTypeGuardを通すと正しく推論されます。
32
+
33
+ ```TypeScript
34
+
35
+ const $t = $R[$k];
36
+
37
+ if(isArray($t)){
38
+
39
+ $t;//これだとTestValue[]と認識される
40
+
41
+ }
42
+
43
+ ```
44
+
45
+ またasで型を強制する事でエラーが出ない様に出来る事も解っています。
46
+
47
+
48
+
49
+ `TestValue[]`なのは自明に見えるのに何故このような挙動になるのでしょうか?