|
| 1 | +=== tests/cases/conformance/inferFromBindingPattern.ts === |
| 2 | +declare function f1<T extends string>(): T; |
| 3 | +>f1 : Symbol(f1, Decl(inferFromBindingPattern.ts, 0, 0)) |
| 4 | +>T : Symbol(T, Decl(inferFromBindingPattern.ts, 0, 20)) |
| 5 | +>T : Symbol(T, Decl(inferFromBindingPattern.ts, 0, 20)) |
| 6 | + |
| 7 | +declare function f2<T extends string>(): [T]; |
| 8 | +>f2 : Symbol(f2, Decl(inferFromBindingPattern.ts, 0, 43)) |
| 9 | +>T : Symbol(T, Decl(inferFromBindingPattern.ts, 1, 20)) |
| 10 | +>T : Symbol(T, Decl(inferFromBindingPattern.ts, 1, 20)) |
| 11 | + |
| 12 | +declare function f3<T extends string>(): { x: T }; |
| 13 | +>f3 : Symbol(f3, Decl(inferFromBindingPattern.ts, 1, 45)) |
| 14 | +>T : Symbol(T, Decl(inferFromBindingPattern.ts, 2, 20)) |
| 15 | +>x : Symbol(x, Decl(inferFromBindingPattern.ts, 2, 42)) |
| 16 | +>T : Symbol(T, Decl(inferFromBindingPattern.ts, 2, 20)) |
| 17 | + |
| 18 | +let x1 = f1(); // string |
| 19 | +>x1 : Symbol(x1, Decl(inferFromBindingPattern.ts, 4, 3)) |
| 20 | +>f1 : Symbol(f1, Decl(inferFromBindingPattern.ts, 0, 0)) |
| 21 | + |
| 22 | +let [x2] = f2(); // string |
| 23 | +>x2 : Symbol(x2, Decl(inferFromBindingPattern.ts, 5, 5)) |
| 24 | +>f2 : Symbol(f2, Decl(inferFromBindingPattern.ts, 0, 43)) |
| 25 | + |
| 26 | +let { x: x3 } = f3(); // string |
| 27 | +>x : Symbol(x, Decl(inferFromBindingPattern.ts, 2, 42)) |
| 28 | +>x3 : Symbol(x3, Decl(inferFromBindingPattern.ts, 6, 5)) |
| 29 | +>f3 : Symbol(f3, Decl(inferFromBindingPattern.ts, 1, 45)) |
| 30 | + |
| 31 | +// Repro from #30379 |
| 32 | + |
| 33 | +function foo<T = number>(): [T] { |
| 34 | +>foo : Symbol(foo, Decl(inferFromBindingPattern.ts, 6, 21)) |
| 35 | +>T : Symbol(T, Decl(inferFromBindingPattern.ts, 10, 13)) |
| 36 | +>T : Symbol(T, Decl(inferFromBindingPattern.ts, 10, 13)) |
| 37 | + |
| 38 | + return [42 as any] |
| 39 | +} |
| 40 | +const [x] = foo(); // [number] |
| 41 | +>x : Symbol(x, Decl(inferFromBindingPattern.ts, 13, 7)) |
| 42 | +>foo : Symbol(foo, Decl(inferFromBindingPattern.ts, 6, 21)) |
| 43 | + |
| 44 | +// Repro from #35291 |
| 45 | + |
| 46 | +interface SelectProps<T, K> { |
| 47 | +>SelectProps : Symbol(SelectProps, Decl(inferFromBindingPattern.ts, 13, 18)) |
| 48 | +>T : Symbol(T, Decl(inferFromBindingPattern.ts, 17, 22)) |
| 49 | +>K : Symbol(K, Decl(inferFromBindingPattern.ts, 17, 24)) |
| 50 | + |
| 51 | + selector?: (obj: T) => K; |
| 52 | +>selector : Symbol(SelectProps.selector, Decl(inferFromBindingPattern.ts, 17, 29)) |
| 53 | +>obj : Symbol(obj, Decl(inferFromBindingPattern.ts, 18, 14)) |
| 54 | +>T : Symbol(T, Decl(inferFromBindingPattern.ts, 17, 22)) |
| 55 | +>K : Symbol(K, Decl(inferFromBindingPattern.ts, 17, 24)) |
| 56 | +} |
| 57 | + |
| 58 | +type SelectResult<T, K> = [K, T]; |
| 59 | +>SelectResult : Symbol(SelectResult, Decl(inferFromBindingPattern.ts, 19, 1)) |
| 60 | +>T : Symbol(T, Decl(inferFromBindingPattern.ts, 21, 18)) |
| 61 | +>K : Symbol(K, Decl(inferFromBindingPattern.ts, 21, 20)) |
| 62 | +>K : Symbol(K, Decl(inferFromBindingPattern.ts, 21, 20)) |
| 63 | +>T : Symbol(T, Decl(inferFromBindingPattern.ts, 21, 18)) |
| 64 | + |
| 65 | +interface Person { |
| 66 | +>Person : Symbol(Person, Decl(inferFromBindingPattern.ts, 21, 33)) |
| 67 | + |
| 68 | + name: string; |
| 69 | +>name : Symbol(Person.name, Decl(inferFromBindingPattern.ts, 23, 18)) |
| 70 | + |
| 71 | + surname: string; |
| 72 | +>surname : Symbol(Person.surname, Decl(inferFromBindingPattern.ts, 24, 15)) |
| 73 | +} |
| 74 | + |
| 75 | +declare function selectJohn<K = Person>(props?: SelectProps<Person, K>): SelectResult<Person, K>; |
| 76 | +>selectJohn : Symbol(selectJohn, Decl(inferFromBindingPattern.ts, 26, 1)) |
| 77 | +>K : Symbol(K, Decl(inferFromBindingPattern.ts, 28, 28)) |
| 78 | +>Person : Symbol(Person, Decl(inferFromBindingPattern.ts, 21, 33)) |
| 79 | +>props : Symbol(props, Decl(inferFromBindingPattern.ts, 28, 40)) |
| 80 | +>SelectProps : Symbol(SelectProps, Decl(inferFromBindingPattern.ts, 13, 18)) |
| 81 | +>Person : Symbol(Person, Decl(inferFromBindingPattern.ts, 21, 33)) |
| 82 | +>K : Symbol(K, Decl(inferFromBindingPattern.ts, 28, 28)) |
| 83 | +>SelectResult : Symbol(SelectResult, Decl(inferFromBindingPattern.ts, 19, 1)) |
| 84 | +>Person : Symbol(Person, Decl(inferFromBindingPattern.ts, 21, 33)) |
| 85 | +>K : Symbol(K, Decl(inferFromBindingPattern.ts, 28, 28)) |
| 86 | + |
| 87 | +const [person] = selectJohn(); |
| 88 | +>person : Symbol(person, Decl(inferFromBindingPattern.ts, 30, 7)) |
| 89 | +>selectJohn : Symbol(selectJohn, Decl(inferFromBindingPattern.ts, 26, 1)) |
| 90 | + |
| 91 | +const [any, whatever] = selectJohn(); |
| 92 | +>any : Symbol(any, Decl(inferFromBindingPattern.ts, 31, 7)) |
| 93 | +>whatever : Symbol(whatever, Decl(inferFromBindingPattern.ts, 31, 11)) |
| 94 | +>selectJohn : Symbol(selectJohn, Decl(inferFromBindingPattern.ts, 26, 1)) |
| 95 | + |
| 96 | +const john = selectJohn(); |
| 97 | +>john : Symbol(john, Decl(inferFromBindingPattern.ts, 32, 5)) |
| 98 | +>selectJohn : Symbol(selectJohn, Decl(inferFromBindingPattern.ts, 26, 1)) |
| 99 | + |
| 100 | +const [personAgain, nufinspecial] = john; |
| 101 | +>personAgain : Symbol(personAgain, Decl(inferFromBindingPattern.ts, 33, 7)) |
| 102 | +>nufinspecial : Symbol(nufinspecial, Decl(inferFromBindingPattern.ts, 33, 19)) |
| 103 | +>john : Symbol(john, Decl(inferFromBindingPattern.ts, 32, 5)) |
| 104 | + |
| 105 | +// Repro from #35291 |
| 106 | + |
| 107 | +declare function makeTuple<T1>(arg: T1): [T1]; |
| 108 | +>makeTuple : Symbol(makeTuple, Decl(inferFromBindingPattern.ts, 33, 41)) |
| 109 | +>T1 : Symbol(T1, Decl(inferFromBindingPattern.ts, 37, 27)) |
| 110 | +>arg : Symbol(arg, Decl(inferFromBindingPattern.ts, 37, 31)) |
| 111 | +>T1 : Symbol(T1, Decl(inferFromBindingPattern.ts, 37, 27)) |
| 112 | +>T1 : Symbol(T1, Decl(inferFromBindingPattern.ts, 37, 27)) |
| 113 | + |
| 114 | +declare function stringy<T = string>(arg?: T): T; |
| 115 | +>stringy : Symbol(stringy, Decl(inferFromBindingPattern.ts, 37, 46)) |
| 116 | +>T : Symbol(T, Decl(inferFromBindingPattern.ts, 38, 25)) |
| 117 | +>arg : Symbol(arg, Decl(inferFromBindingPattern.ts, 38, 37)) |
| 118 | +>T : Symbol(T, Decl(inferFromBindingPattern.ts, 38, 25)) |
| 119 | +>T : Symbol(T, Decl(inferFromBindingPattern.ts, 38, 25)) |
| 120 | + |
| 121 | +const isStringTuple = makeTuple(stringy()); // [string] |
| 122 | +>isStringTuple : Symbol(isStringTuple, Decl(inferFromBindingPattern.ts, 40, 5)) |
| 123 | +>makeTuple : Symbol(makeTuple, Decl(inferFromBindingPattern.ts, 33, 41)) |
| 124 | +>stringy : Symbol(stringy, Decl(inferFromBindingPattern.ts, 37, 46)) |
| 125 | + |
| 126 | +const [isAny] = makeTuple(stringy()); // [string] |
| 127 | +>isAny : Symbol(isAny, Decl(inferFromBindingPattern.ts, 41, 7)) |
| 128 | +>makeTuple : Symbol(makeTuple, Decl(inferFromBindingPattern.ts, 33, 41)) |
| 129 | +>stringy : Symbol(stringy, Decl(inferFromBindingPattern.ts, 37, 46)) |
| 130 | + |
0 commit comments