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 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
|
=== tests/cases/conformance/types/typeParameters/typeArgumentLists/functionConstraintSatisfaction2.ts ===
// satisfaction of a constraint to Function, all of these invocations are errors unless otherwise noted
function foo<T extends Function>(x: T): T { return x; }
>foo : <T extends Function>(x: T) => T
>x : T
>x : T
foo(1);
>foo(1) : any
>foo : <T extends Function>(x: T) => T
>1 : 1
foo(() => { }, 1);
>foo(() => { }, 1) : any
>foo : <T extends Function>(x: T) => T
>() => { } : () => void
>1 : 1
foo(1, () => { });
>foo(1, () => { }) : any
>foo : <T extends Function>(x: T) => T
>1 : 1
>() => { } : () => void
function foo2<T extends (x: string) => string>(x: T): T { return x; }
>foo2 : <T extends (x: string) => string>(x: T) => T
>x : string
>x : T
>x : T
class C {
>C : C
foo: string;
>foo : string
}
var b: { new (x: string): string };
>b : new (x: string) => string
>x : string
class C2<T> {
>C2 : C2<T>
foo: T;
>foo : T
}
var b2: { new <T>(x: T): T };
>b2 : new <T>(x: T) => T
>x : T
var r = foo2(new Function());
>r : any
>foo2(new Function()) : any
>foo2 : <T extends (x: string) => string>(x: T) => T
>new Function() : Function
>Function : FunctionConstructor
var r2 = foo2((x: string[]) => x);
>r2 : any
>foo2((x: string[]) => x) : any
>foo2 : <T extends (x: string) => string>(x: T) => T
>(x: string[]) => x : (x: string[]) => string[]
>x : string[]
>x : string[]
var r6 = foo2(C);
>r6 : any
>foo2(C) : any
>foo2 : <T extends (x: string) => string>(x: T) => T
>C : typeof C
var r7 = foo2(b);
>r7 : any
>foo2(b) : any
>foo2 : <T extends (x: string) => string>(x: T) => T
>b : new (x: string) => string
var r8 = foo2(<U>(x: U) => x); // no error expected
>r8 : (x: string) => string
>foo2(<U>(x: U) => x) : (x: string) => string
>foo2 : <T extends (x: string) => string>(x: T) => T
><U>(x: U) => x : <U>(x: U) => U
>x : U
>x : U
var r11 = foo2(<U, V>(x: U, y: V) => x);
>r11 : any
>foo2(<U, V>(x: U, y: V) => x) : any
>foo2 : <T extends (x: string) => string>(x: T) => T
><U, V>(x: U, y: V) => x : <U, V>(x: U, y: V) => U
>x : U
>y : V
>x : U
var r13 = foo2(C2);
>r13 : any
>foo2(C2) : any
>foo2 : <T extends (x: string) => string>(x: T) => T
>C2 : typeof C2
var r14 = foo2(b2);
>r14 : any
>foo2(b2) : any
>foo2 : <T extends (x: string) => string>(x: T) => T
>b2 : new <T>(x: T) => T
interface F2 extends Function { foo: string; }
>foo : string
var f2: F2;
>f2 : F2
var r16 = foo2(f2);
>r16 : any
>foo2(f2) : any
>foo2 : <T extends (x: string) => string>(x: T) => T
>f2 : F2
function fff<T extends { (): void }, U extends T>(x: T, y: U) {
>fff : <T extends () => void, U extends T>(x: T, y: U) => void
>x : T
>y : U
foo2(x);
>foo2(x) : any
>foo2 : <T extends (x: string) => string>(x: T) => T
>x : T
foo2(y);
>foo2(y) : any
>foo2 : <T extends (x: string) => string>(x: T) => T
>y : U
}
|