diff --git a/tests/cases/compiler/typePredicateStructuralMatch.ts b/tests/cases/compiler/typePredicateStructuralMatch.ts new file mode 100644 index 0000000000..690e5f62b2 --- /dev/null +++ b/tests/cases/compiler/typePredicateStructuralMatch.ts @@ -0,0 +1,26 @@ +// Repro from #12235 + +getResults1([]); +getResults1({data: []}); + +getResults2([]); +getResults2({data: []}); + +type Result = { value: string }; +type Results = Result[]; + +function isResponseInData(value: T | { data: T}): value is { data: T } { + return value.hasOwnProperty('data'); +} + +function getResults1(value: Results | { data: Results }): Results { + return isResponseInData(value) ? value.data : value; +} + +function isPlainResponse(value: T | { data: T}): value is T { + return !value.hasOwnProperty('data'); +} + +function getResults2(value: Results | { data: Results }): Results { + return isPlainResponse(value) ? value : value.data; +} \ No newline at end of file