This is important for incremental parsing, as it is where we can attach parse errors at the end of the file to. Also, it helps with things like emitting comments at the end of the file.
51 lines
989 B
TypeScript
51 lines
989 B
TypeScript
//// [typeParameterAsTypeArgument.ts]
|
|
// These are all errors because type parameters cannot reference other type parameters from the same list
|
|
|
|
function foo<T, U>(x: T, y: U) {
|
|
foo<U, U>(y, y);
|
|
return new C<U,T>();
|
|
}
|
|
|
|
class C<T, U> {
|
|
x: T;
|
|
}
|
|
|
|
interface I<T, U> {
|
|
x: C<U, T>;
|
|
}
|
|
|
|
//function foo<T, U extends T>(x: T, y: U) {
|
|
// foo<U, U>(y, y);
|
|
// return new C<U, T>();
|
|
//}
|
|
|
|
//class C<T extends U, U> {
|
|
// x: T;
|
|
//}
|
|
|
|
//interface I<T, U extends T> {
|
|
// x: C<U, T>;
|
|
//}
|
|
|
|
|
|
//// [typeParameterAsTypeArgument.js]
|
|
// These are all errors because type parameters cannot reference other type parameters from the same list
|
|
function foo(x, y) {
|
|
foo(y, y);
|
|
return new C();
|
|
}
|
|
var C = (function () {
|
|
function C() {
|
|
}
|
|
return C;
|
|
})();
|
|
//function foo<T, U extends T>(x: T, y: U) {
|
|
// foo<U, U>(y, y);
|
|
// return new C<U, T>();
|
|
//}
|
|
//class C<T extends U, U> {
|
|
// x: T;
|
|
//}
|
|
//interface I<T, U extends T> {
|
|
// x: C<U, T>;
|
|
//}
|