17 lines
457 B
JavaScript
17 lines
457 B
JavaScript
type I<X> = () => I<I<X>>;
|
|
type J<X> = () => J<J<X>>;
|
|
|
|
function foo(x: I<number>): J<number> {
|
|
return x; // terminate despite expanding types, OK
|
|
// I<number> and J<number> both expand to () => () => ...
|
|
}
|
|
|
|
type Q<X> = { x: X; }
|
|
type P<X> = () => Q<P<X>>;
|
|
|
|
function bar(x: P<number>): () => P<number> {
|
|
return x; // terminate despite expanding types, error
|
|
// P<number> = () => { x: P<number> }
|
|
// () => P<number> = () => () => { x: P<number> }
|
|
}
|