From 2bcb6e9812659095d2a60cd53bb4a73f286ed74c Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Mon, 14 Nov 2016 17:06:57 -0800 Subject: [PATCH] Accept baselines --- .../typePredicateStructuralMatch.errors.txt | 36 +++++++++++++++ .../reference/typePredicateStructuralMatch.js | 46 +++++++++++++++++++ 2 files changed, 82 insertions(+) create mode 100644 tests/baselines/reference/typePredicateStructuralMatch.errors.txt create mode 100644 tests/baselines/reference/typePredicateStructuralMatch.js diff --git a/tests/baselines/reference/typePredicateStructuralMatch.errors.txt b/tests/baselines/reference/typePredicateStructuralMatch.errors.txt new file mode 100644 index 00000000000..72cf04ddeb0 --- /dev/null +++ b/tests/baselines/reference/typePredicateStructuralMatch.errors.txt @@ -0,0 +1,36 @@ +tests/cases/compiler/typePredicateStructuralMatch.ts(17,12): error TS2322: Type 'Result[] | { data: Result[]; }' is not assignable to type 'Result[]'. + Type '{ data: Result[]; }' is not assignable to type 'Result[]'. + Property 'length' is missing in type '{ data: Result[]; }'. + + +==== tests/cases/compiler/typePredicateStructuralMatch.ts (1 errors) ==== + // 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; + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2322: Type 'Result[] | { data: Result[]; }' is not assignable to type 'Result[]'. +!!! error TS2322: Type '{ data: Result[]; }' is not assignable to type 'Result[]'. +!!! error TS2322: Property 'length' is missing in type '{ data: Result[]; }'. + } + + 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 diff --git a/tests/baselines/reference/typePredicateStructuralMatch.js b/tests/baselines/reference/typePredicateStructuralMatch.js new file mode 100644 index 00000000000..682fac5536e --- /dev/null +++ b/tests/baselines/reference/typePredicateStructuralMatch.js @@ -0,0 +1,46 @@ +//// [typePredicateStructuralMatch.ts] +// 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; +} + +//// [typePredicateStructuralMatch.js] +// Repro from #12235 +getResults1([]); +getResults1({ data: [] }); +getResults2([]); +getResults2({ data: [] }); +function isResponseInData(value) { + return value.hasOwnProperty('data'); +} +function getResults1(value) { + return isResponseInData(value) ? value.data : value; +} +function isPlainResponse(value) { + return !value.hasOwnProperty('data'); +} +function getResults2(value) { + return isPlainResponse(value) ? value : value.data; +}