Open
Description
TypeScript Version: 2.6.2
Code
Apologies for the length - I can't really make the repro any smaller than this without it taking a fraction of the time and about half the memory. Also, note: this does not require a config.
interface Context<P, O> {
createV(this: this & Context<P, O & {raw: true}>, attrs: P): Context<P, O>;
createRC(this: this & Context<P, O & {raw: true}>, attrs: P, ref: (elem: P) => any): Context<P, O>;
simpleV(this: this & Context<P, O & {raw: true}>, attrs: P): void;
simpleRC(this: this & Context<P, O & {raw: true}>, attrs: P, ref: (elem: P) => any): void;
add(this: this & Context<P, O & {text: true}>): void;
raw(this: this & Context<P, O & {raw: true}>, elem: P): void;
invokeC<C>(
tag: Component<object, P, O>,
children: (r: Context<P, O>, context: C) => void,
context: C
): void;
invokeAC<A extends object, C>(
tag: Component<A, P, O>, attrs: A,
children: (r: Context<P, O>, context: C) => void,
context: C
): void;
}
interface TopContext<P, O> extends Context<P, O> {
hasOption<K extends keyof O>(key: K): this is (this & TopContext<P, {[P in K]: O[P]}>);
}
type Component<A extends object, P, O> = <C>(
attrs: A, r: TopContext<P, O>,
children: (r: Context<P, O>, context: C) => void,
context: C
) => void
interface ContextWrap<P, O> {
instance: Context<P, O>;
}
interface TopContextWrap<P, O> extends ContextWrap<P, O> {
instance: TopContext<P, O>;
}
Expected behavior: It to take maybe a few seconds. Remove any one function or property out of that, and that's the compilation time I would normally expect.
Actual behavior: It takes ~15-20 seconds to check, and requires ~180-200 MB of memory in the process.