1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
|
=== tests/cases/compiler/typePredicateStructuralMatch.ts ===
// Repro from #12235
getResults1([]);
>getResults1([]) : Result[]
>getResults1 : (value: Result[] | { data: Result[]; }) => Result[]
>[] : undefined[]
getResults1({data: []});
>getResults1({data: []}) : Result[]
>getResults1 : (value: Result[] | { data: Result[]; }) => Result[]
>{data: []} : { data: undefined[]; }
>data : undefined[]
>[] : undefined[]
getResults2([]);
>getResults2([]) : Result[]
>getResults2 : (value: Result[] | { data: Result[]; }) => Result[]
>[] : undefined[]
getResults2({data: []});
>getResults2({data: []}) : Result[]
>getResults2 : (value: Result[] | { data: Result[]; }) => Result[]
>{data: []} : { data: undefined[]; }
>data : undefined[]
>[] : undefined[]
type Result = { value: string };
>Result : Result
>value : string
type Results = Result[];
>Results : Result[]
function isResponseInData<T>(value: T | { data: T}): value is { data: T } {
>isResponseInData : <T>(value: T | { data: T; }) => value is { data: T; }
>value : T | { data: T; }
>data : T
>data : T
return value.hasOwnProperty('data');
>value.hasOwnProperty('data') : boolean
>value.hasOwnProperty : (v: string | number | symbol) => boolean
>value : T | { data: T; }
>hasOwnProperty : (v: string | number | symbol) => boolean
>'data' : "data"
}
function getResults1(value: Results | { data: Results }): Results {
>getResults1 : (value: Result[] | { data: Result[]; }) => Result[]
>value : Result[] | { data: Result[]; }
>data : Result[]
return isResponseInData(value) ? value.data : value;
>isResponseInData(value) ? value.data : value : Result[]
>isResponseInData(value) : boolean
>isResponseInData : <T>(value: T | { data: T; }) => value is { data: T; }
>value : Result[] | { data: Result[]; }
>value.data : Result[]
>value : { data: Result[]; }
>data : Result[]
>value : Result[]
}
function isPlainResponse<T>(value: T | { data: T}): value is T {
>isPlainResponse : <T>(value: T | { data: T; }) => value is T
>value : T | { data: T; }
>data : T
return !value.hasOwnProperty('data');
>!value.hasOwnProperty('data') : boolean
>value.hasOwnProperty('data') : boolean
>value.hasOwnProperty : (v: string | number | symbol) => boolean
>value : T | { data: T; }
>hasOwnProperty : (v: string | number | symbol) => boolean
>'data' : "data"
}
function getResults2(value: Results | { data: Results }): Results {
>getResults2 : (value: Result[] | { data: Result[]; }) => Result[]
>value : Result[] | { data: Result[]; }
>data : Result[]
return isPlainResponse(value) ? value : value.data;
>isPlainResponse(value) ? value : value.data : Result[]
>isPlainResponse(value) : boolean
>isPlainResponse : <T>(value: T | { data: T; }) => value is T
>value : Result[] | { data: Result[]; }
>value : Result[]
>value.data : Result[]
>value : { data: Result[]; }
>data : Result[]
}
|