File tree 2 files changed +82
-0
lines changed
tests/baselines/reference
2 files changed +82
-0
lines changed Original file line number Diff line number Diff line change
1
+ tests/cases/compiler/typePredicateStructuralMatch.ts(17,12): error TS2322: Type 'Result[] | { data: Result[]; }' is not assignable to type 'Result[]'.
2
+ Type '{ data: Result[]; }' is not assignable to type 'Result[]'.
3
+ Property 'length' is missing in type '{ data: Result[]; }'.
4
+
5
+
6
+ ==== tests/cases/compiler/typePredicateStructuralMatch.ts (1 errors) ====
7
+ // Repro from #12235
8
+
9
+ getResults1([]);
10
+ getResults1({data: []});
11
+
12
+ getResults2([]);
13
+ getResults2({data: []});
14
+
15
+ type Result = { value: string };
16
+ type Results = Result[];
17
+
18
+ function isResponseInData<T>(value: T | { data: T}): value is { data: T } {
19
+ return value.hasOwnProperty('data');
20
+ }
21
+
22
+ function getResults1(value: Results | { data: Results }): Results {
23
+ return isResponseInData(value) ? value.data : value;
24
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
25
+ !!! error TS2322: Type 'Result[] | { data: Result[]; }' is not assignable to type 'Result[]'.
26
+ !!! error TS2322: Type '{ data: Result[]; }' is not assignable to type 'Result[]'.
27
+ !!! error TS2322: Property 'length' is missing in type '{ data: Result[]; }'.
28
+ }
29
+
30
+ function isPlainResponse<T>(value: T | { data: T}): value is T {
31
+ return !value.hasOwnProperty('data');
32
+ }
33
+
34
+ function getResults2(value: Results | { data: Results }): Results {
35
+ return isPlainResponse(value) ? value : value.data;
36
+ }
Original file line number Diff line number Diff line change
1
+ //// [typePredicateStructuralMatch.ts]
2
+ // Repro from #12235
3
+
4
+ getResults1 ( [ ] ) ;
5
+ getResults1 ( { data : [ ] } ) ;
6
+
7
+ getResults2 ( [ ] ) ;
8
+ getResults2 ( { data : [ ] } ) ;
9
+
10
+ type Result = { value : string } ;
11
+ type Results = Result [ ] ;
12
+
13
+ function isResponseInData < T > (value: T | { data : T } ): value is { data : T } {
14
+ return value . hasOwnProperty ( 'data' ) ;
15
+ }
16
+
17
+ function getResults1(value: Results | { data : Results } ): Results {
18
+ return isResponseInData ( value ) ? value . data : value ;
19
+ }
20
+
21
+ function isPlainResponse< T > (value: T | { data : T } ): value is T {
22
+ return ! value . hasOwnProperty ( 'data' ) ;
23
+ }
24
+
25
+ function getResults2(value: Results | { data : Results } ): Results {
26
+ return isPlainResponse ( value ) ? value : value . data ;
27
+ }
28
+
29
+ //// [typePredicateStructuralMatch.js]
30
+ // Repro from #12235
31
+ getResults1([]);
32
+ getResults1({ data : [ ] } );
33
+ getResults2([]);
34
+ getResults2({ data : [ ] } );
35
+ function isResponseInData(value) {
36
+ return value . hasOwnProperty ( 'data' ) ;
37
+ }
38
+ function getResults1(value) {
39
+ return isResponseInData ( value ) ? value . data : value ;
40
+ }
41
+ function isPlainResponse(value) {
42
+ return ! value . hasOwnProperty ( 'data' ) ;
43
+ }
44
+ function getResults2(value) {
45
+ return isPlainResponse ( value ) ? value : value . data ;
46
+ }
You can’t perform that action at this time.
0 commit comments