Skip to content

Commit 2bcb6e9

Browse files
committed
Accept baselines
1 parent 6d28595 commit 2bcb6e9

File tree

2 files changed

+82
-0
lines changed

2 files changed

+82
-0
lines changed
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
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+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
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+
}

0 commit comments

Comments
 (0)