File tree Expand file tree Collapse file tree
tests/baselines/reference Expand file tree Collapse file tree 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