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 110 111 112 113 114 115 116 117 118
|
=== tests/cases/compiler/inferentialTypingWithFunctionTypeSyntacticScenarios.ts ===
declare function map<T, U>(array: T, func: (x: T) => U): U;
>map : <T, U>(array: T, func: (x: T) => U) => U
>array : T
>func : (x: T) => U
>x : T
declare function identity<V>(y: V): V;
>identity : <V>(y: V) => V
>y : V
var s: string;
>s : string
// dotted name
var dottedIdentity = { x: identity };
>dottedIdentity : { x: <V>(y: V) => V; }
>{ x: identity } : { x: <V>(y: V) => V; }
>x : <V>(y: V) => V
>identity : <V>(y: V) => V
s = map("", dottedIdentity.x);
>s = map("", dottedIdentity.x) : string
>s : string
>map("", dottedIdentity.x) : string
>map : <T, U>(array: T, func: (x: T) => U) => U
>"" : ""
>dottedIdentity.x : <V>(y: V) => V
>dottedIdentity : { x: <V>(y: V) => V; }
>x : <V>(y: V) => V
// index expression
s = map("", dottedIdentity['x']);
>s = map("", dottedIdentity['x']) : string
>s : string
>map("", dottedIdentity['x']) : string
>map : <T, U>(array: T, func: (x: T) => U) => U
>"" : ""
>dottedIdentity['x'] : <V>(y: V) => V
>dottedIdentity : { x: <V>(y: V) => V; }
>'x' : "x"
// function call
s = map("", (() => identity)());
>s = map("", (() => identity)()) : string
>s : string
>map("", (() => identity)()) : string
>map : <T, U>(array: T, func: (x: T) => U) => U
>"" : ""
>(() => identity)() : <V>(y: V) => V
>(() => identity) : () => <V>(y: V) => V
>() => identity : () => <V>(y: V) => V
>identity : <V>(y: V) => V
// construct
interface IdentityConstructor {
new (): typeof identity;
>identity : <V>(y: V) => V
}
var ic: IdentityConstructor;
>ic : IdentityConstructor
s = map("", new ic());
>s = map("", new ic()) : string
>s : string
>map("", new ic()) : string
>map : <T, U>(array: T, func: (x: T) => U) => U
>"" : ""
>new ic() : <V>(y: V) => V
>ic : IdentityConstructor
// assignment
var t;
>t : any
s = map("", t = identity);
>s = map("", t = identity) : string
>s : string
>map("", t = identity) : string
>map : <T, U>(array: T, func: (x: T) => U) => U
>"" : ""
>t = identity : <V>(y: V) => V
>t : any
>identity : <V>(y: V) => V
// type assertion
s = map("", <typeof identity>identity);
>s = map("", <typeof identity>identity) : string
>s : string
>map("", <typeof identity>identity) : string
>map : <T, U>(array: T, func: (x: T) => U) => U
>"" : ""
><typeof identity>identity : <V>(y: V) => V
>identity : <V>(y: V) => V
>identity : <V>(y: V) => V
// parenthesized expression
s = map("", (identity));
>s = map("", (identity)) : string
>s : string
>map("", (identity)) : string
>map : <T, U>(array: T, func: (x: T) => U) => U
>"" : ""
>(identity) : <V>(y: V) => V
>identity : <V>(y: V) => V
// comma
s = map("", ("", identity));
>s = map("", ("", identity)) : string
>s : string
>map("", ("", identity)) : string
>map : <T, U>(array: T, func: (x: T) => U) => U
>"" : ""
>("", identity) : <V>(y: V) => V
>"", identity : <V>(y: V) => V
>"" : ""
>identity : <V>(y: V) => V
|