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 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
|
=== tests/cases/compiler/inferenceOptionalPropertiesToIndexSignatures.ts ===
declare function foo<T>(obj: { [x: string]: T }): T;
>foo : <T>(obj: { [x: string]: T; }) => T
>obj : { [x: string]: T; }
>x : string
declare const x1: { a: string, b: number };
>x1 : { a: string; b: number; }
>a : string
>b : number
declare const x2: { a: string, b: number | undefined };
>x2 : { a: string; b: number | undefined; }
>a : string
>b : number | undefined
declare const x3: { a: string, b?: number };
>x3 : { a: string; b?: number | undefined; }
>a : string
>b : number | undefined
declare const x4: { a: string, b?: number | undefined };
>x4 : { a: string; b?: number | undefined; }
>a : string
>b : number | undefined
let a1 = foo(x1); // string | number
>a1 : string | number
>foo(x1) : string | number
>foo : <T>(obj: { [x: string]: T; }) => T
>x1 : { a: string; b: number; }
let a2 = foo(x2); // string | number | undefined
>a2 : string | number | undefined
>foo(x2) : string | number | undefined
>foo : <T>(obj: { [x: string]: T; }) => T
>x2 : { a: string; b: number | undefined; }
let a3 = foo(x3); // string | number
>a3 : string | number
>foo(x3) : string | number
>foo : <T>(obj: { [x: string]: T; }) => T
>x3 : { a: string; b?: number | undefined; }
let a4 = foo(x4); // string | number
>a4 : string | number
>foo(x4) : string | number
>foo : <T>(obj: { [x: string]: T; }) => T
>x4 : { a: string; b?: number | undefined; }
// Repro from #43045
const param2 = Math.random() < 0.5 ? 'value2' : null;
>param2 : "value2" | null
>Math.random() < 0.5 ? 'value2' : null : "value2" | null
>Math.random() < 0.5 : boolean
>Math.random() : number
>Math.random : () => number
>Math : Math
>random : () => number
>0.5 : 0.5
>'value2' : "value2"
>null : null
const obj = {
>obj : { param2?: string | undefined; param1: string; }
>{ param1: 'value1', ...(param2 ? {param2} : {})} : { param2?: string | undefined; param1: string; }
param1: 'value1',
>param1 : string
>'value1' : "value1"
...(param2 ? {param2} : {})
>(param2 ? {param2} : {}) : { param2: string; } | {}
>param2 ? {param2} : {} : { param2: string; } | {}
>param2 : "value2" | null
>{param2} : { param2: string; }
>param2 : string
>{} : {}
};
const query = Object.entries(obj).map(
>query : string
>Object.entries(obj).map( ([k, v]) => `${k}=${encodeURIComponent(v)}`).join('&') : string
>Object.entries(obj).map( ([k, v]) => `${k}=${encodeURIComponent(v)}`).join : (separator?: string | undefined) => string
>Object.entries(obj).map( ([k, v]) => `${k}=${encodeURIComponent(v)}`) : string[]
>Object.entries(obj).map : <U>(callbackfn: (value: [string, string], index: number, array: [string, string][]) => U, thisArg?: any) => U[]
>Object.entries(obj) : [string, string][]
>Object.entries : { <T>(o: { [s: string]: T; } | ArrayLike<T>): [string, T][]; (o: {}): [string, any][]; }
>Object : ObjectConstructor
>entries : { <T>(o: { [s: string]: T; } | ArrayLike<T>): [string, T][]; (o: {}): [string, any][]; }
>obj : { param2?: string | undefined; param1: string; }
>map : <U>(callbackfn: (value: [string, string], index: number, array: [string, string][]) => U, thisArg?: any) => U[]
([k, v]) => `${k}=${encodeURIComponent(v)}`
>([k, v]) => `${k}=${encodeURIComponent(v)}` : ([k, v]: [string, string]) => string
>k : string
>v : string
>`${k}=${encodeURIComponent(v)}` : string
>k : string
>encodeURIComponent(v) : string
>encodeURIComponent : (uriComponent: string | number | boolean) => string
>v : string
).join('&');
>join : (separator?: string | undefined) => string
>'&' : "&"
|