2014-08-15 23:33:16 +02:00
|
|
|
=== tests/cases/conformance/types/typeParameters/typeArgumentLists/wrappedAndRecursiveConstraints.ts ===
|
|
|
|
// no errors expected
|
|
|
|
|
|
|
|
class C<T extends Date> {
|
2015-04-16 01:44:20 +02:00
|
|
|
>C : C<T>
|
|
|
|
>T : T
|
|
|
|
>Date : Date
|
2014-08-15 23:33:16 +02:00
|
|
|
|
|
|
|
constructor(public data: T) { }
|
2015-04-16 01:44:20 +02:00
|
|
|
>data : T
|
|
|
|
>T : T
|
2014-08-15 23:33:16 +02:00
|
|
|
|
|
|
|
foo<U extends T>(x: U) {
|
2015-04-16 01:44:20 +02:00
|
|
|
>foo : <U extends T>(x: U) => U
|
|
|
|
>U : U
|
|
|
|
>T : T
|
|
|
|
>x : U
|
|
|
|
>U : U
|
2014-08-15 23:33:16 +02:00
|
|
|
|
|
|
|
return x;
|
2015-04-16 01:44:20 +02:00
|
|
|
>x : U
|
2014-08-15 23:33:16 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
interface Foo extends Date {
|
2015-04-16 01:44:20 +02:00
|
|
|
>Foo : Foo
|
|
|
|
>Date : Date
|
2014-08-15 23:33:16 +02:00
|
|
|
|
|
|
|
foo: string;
|
2015-04-16 01:44:20 +02:00
|
|
|
>foo : string
|
2014-08-15 23:33:16 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
var y: Foo = null;
|
2015-04-16 01:44:20 +02:00
|
|
|
>y : Foo
|
|
|
|
>Foo : Foo
|
2015-04-13 21:36:11 +02:00
|
|
|
>null : null
|
2014-08-15 23:33:16 +02:00
|
|
|
|
|
|
|
var c = new C(y);
|
2015-04-16 01:44:20 +02:00
|
|
|
>c : C<Foo>
|
2014-08-15 23:33:16 +02:00
|
|
|
>new C(y) : C<Foo>
|
2015-04-16 01:44:20 +02:00
|
|
|
>C : typeof C
|
|
|
|
>y : Foo
|
2014-08-15 23:33:16 +02:00
|
|
|
|
|
|
|
var r = c.foo(y);
|
2015-04-16 01:44:20 +02:00
|
|
|
>r : Foo
|
2014-08-15 23:33:16 +02:00
|
|
|
>c.foo(y) : Foo
|
2015-04-16 01:44:20 +02:00
|
|
|
>c.foo : <U extends Foo>(x: U) => U
|
|
|
|
>c : C<Foo>
|
|
|
|
>foo : <U extends Foo>(x: U) => U
|
|
|
|
>y : Foo
|
2014-08-15 23:33:16 +02:00
|
|
|
|