Closed
Description
TypeScript Version:
2.8 and 2.9
Search Terms:
Out of stack space
Code
namespace Test {
export interface IType<TInstance = object> {
new(...args: any[]): TInstance;
}
export function ClassFactory<TBaseClass extends IType, TClass extends IType, TFactory extends IType, TNamespace extends object>
(namespace: TNamespace, base: IClassFactory & { $__type: TBaseClass }, getType: (base: TBaseClass) => [TClass, TFactory], exportName?: keyof TNamespace, addMemberTypeInfo = true)
: TClass & TFactory & { $__type: TClass } {
return null;
}
export function FactoryBase<TClass extends IType, TBaseFactory extends IType, TStaticProperties extends keyof TClass>
(type: TClass, baseFactoryType: TBaseFactory) {
return class FactoryBase extends type {
static 'new'?(...args: any[]): any;
static init?(o: InstanceType<TClass>, isnew: boolean, ...args: any[]): void;
};
}
export namespace Loader {
export var SomeClass = ClassFactory(Loader, void 0,
(base) => {
class SomeClass {
private x: number;
protected static readonly 'SomeClassFactory' = class Factory extends FactoryBase(SomeClass, null) {
static 'new'(): SomeClass { return null; }
static init(o: SomeClass, isnew: boolean) {
o.x = 1;
}
};
}
return [SomeClass, SomeClass["SomeClassFactory"]];
}
);
}
}
Configuration used:
{
"compilerOptions": {
"experimentalDecorators": true,
"suppressImplicitAnyIndexErrors": true,
"traceResolution": true,
"listFiles": true,
"diagnostics": true,
"forceConsistentCasingInFileNames": false,
"noImplicitAny": true,
"noEmitOnError": false,
"removeComments": false,
"noEmitHelpers": true,
"declaration": true,
"declarationDir": "wwwroot/js",
//"typeRoots": [ "typings" ],
"sourceMap": true,
"target": "es5", // IE11=es5, Edge+ es2015=ES6
"outDir": "wwwroot/js",
"downlevelIteration": true,
"rootDir": "Scripts", // *** location of the scripts ***
"lib": [ "dom", "es6", "dom.iterable", "scripthost" ] // (target es5 but use es6 libs, since there is partial support of some es6 in es5; lib options: https://www.typescriptlang.org/docs/handbook/compiler-options.html)
},
"include": [
"typings/**/*.ts",
"Scripts/testscript.ts"
]
}
Compiled using this line:
tsc.exe --project "{path too source}\tsconfig.json" --locale en-US
Expected behavior:
Good behavior: Not out of stack space error.
Actual behavior:
Bad: Out of stack space error.
Playground Link:
https://goo.gl/UHStFt
This works PERFECT when this is commented out:
"declaration": true,
"declarationDir": "wwwroot/js",
I had to spend a lot of time whittling down the production source (many, many, files) down to this test. The production code this is taken from compiles AND runs PERFECT! Everyone is a happy camper (this code also compiles ok when declarations are turned off), BUT when I switch on declaration file generation, everything craps out (and the campers are not happy anymore). ;)