Excessive stack depth comparing types with TS 3.2
GabrielCastro opened this issue ยท 25 comments
TypeScript Version: 3.2.2
Search Terms:
error TS2321: Excessive stack depth comparing types
lodash
Code
import { PartialDeep, pick } from 'lodash';
type MapFunc<T> = (data: PartialDeep<T>) => PartialDeep<T>;
function testFunc<T>(): MapFunc<T> {
return data => pick<PartialDeep<T>>(data, []) as PartialDeep<T>;
}
{
"compilerOptions": {
"target": "es2018",
"module": "commonjs",
"lib": ["es2018", "dom"],
"strict": true,
"noEmitOnError": true
}
}
Expected behavior:
This code should compile with TS 3.2 as it will with TS 3.1
Actual behavior:
Compliation fails with the following error
error TS2321: Excessive stack depth comparing types 'PartialDeep<T>' and 'PartialDeep<PartialDeep<T>>'.
Found 2 errors.
typescript@3.2.4
C:\dev\server\node_modules\ts-node\src\index.ts:261
return new TSError(diagnosticText, diagnosticCodes)
^
TSError: โจฏ Unable to compile TypeScript:
error TS2321: Excessive stack depth comparing types 'any' and 'ListIterateeCustom<T, boolean>'.
error TS2321: Excessive stack depth comparing types 'any' and 'ObjectIterateeCustom<T[], boolean>'.
I can confirm, that this issue still persists in TypeScript@3.2.4
..
This thread, however, is a duplicate of #21592 .
This issue was introduced somehwere in 2.7.x - and has been moved from milestone to milestone to get fixed. Unfortunately, this has not been the case for now :(
Same issue here with TypeORM. :(
error TS2321: Excessive stack depth comparing types 'any' and 'FindConditions'.
I think, the TypeORM related issue is the most common threat, why people end up in this issue here, haha ;)
This issue is a deal breaker :-(
Can you guys please check it in the 0.2.15-rc.1
? (npm i typeorm@0.2.15-rc.1
)
EDIT: it works with npm i typescript@3.1.6
Unfortunately @pleerock I get the same with 0.2.15-rc.1 (TS 3.3.3333, ts-node: 8.0.3):
โฐโ$ ts-node src/code/server.ts
OR
โฐโ$ node -r ts-node/register src/code/server.ts
1 โต
error: uncaughtException: โจฏ Unable to compile TypeScript:
error TS2321: Excessive stack depth comparing types 'any' and 'FindConditions<TEntity> | undefined'.
date=Sun Mar 10 2019 20:30:52 GMT+0000 (Greenwich Mean Time), pid=5728, uid=1000, gid=1000, cwd=/mnt/projects/projects/pickpeak/api, execPath=/usr/local/bin/node, version=v11.8.0, argv=[/devtools/npm-global/bin/ts-node, /mnt/projects/projects/pickpeak/api/src/code/server.ts], rss=440221696, heapTotal=364154880, heapUsed=257885040, external=87005, loadavg=[1.3564453125, 1.87939453125, 0.99951171875], uptime=409, trace=[column=12, file=/devtools/npm-global/lib/node_modules/ts-node/src/index.ts, function=createTSError, line=226, method=null, native=false, column=40, file=/devtools/npm-global/lib/node_modules/ts-node/src/index.ts, function=getOutput, line=335, method=null, native=false, column=11, file=/devtools/npm-global/lib/node_modules/ts-node/src/index.ts, function=Object.compile, line=368, method=compile, native=false, column=43, file=/devtools/npm-global/lib/node_modules/ts-node/src/index.ts, function=Module.m._compile, line=414, method=_compile, native=false, column=10, file=internal/modules/cjs/loader.js, function=Module._extensions..js, line=747, method=.js, native=false, column=12, file=/devtools/npm-global/lib/node_modules/ts-node/src/index.ts, function=Object.require.extensions.(anonymous function) [as .ts], line=417, method=ts], native=false, column=32, file=internal/modules/cjs/loader.js, function=Module.load, line=628, method=load, native=false, column=12, file=internal/modules/cjs/loader.js, function=tryModuleLoad, line=568, method=null, native=false, column=3, file=internal/modules/cjs/loader.js, function=Module._load, line=560, method=_load, native=false, column=17, file=internal/modules/cjs/loader.js, function=Module.require, line=665, method=require, native=false], stack=[TSError: โจฏ Unable to compile TypeScript:, error TS2321: Excessive stack depth comparing types 'any' and 'FindConditions<TEntity> | undefined'., , at createTSError (/devtools/npm-global/lib/node_modules/ts-node/src/index.ts:226:12), at getOutput (/devtools/npm-global/lib/node_modules/ts-node/src/index.ts:335:40), at Object.compile (/devtools/npm-global/lib/node_modules/ts-node/src/index.ts:368:11), at Module.m._compile (/devtools/npm-global/lib/node_modules/ts-node/src/index.ts:414:43), at Module._extensions..js (internal/modules/cjs/loader.js:747:10), at Object.require.extensions.(anonymous function) [as .ts] (/devtools/npm-global/lib/node_modules/ts-node/src/index.ts:417:12), at Module.load (internal/modules/cjs/loader.js:628:32), at tryModuleLoad (internal/modules/cjs/loader.js:568:12), at Function.Module._load (internal/modules/cjs/loader.js:560:3), at Module.require (internal/modules/cjs/loader.js:665:17)]
Weirdly enough it works fine with just a $ tsc
compilation.
The only way I could reproduce this issue is when I did gulp package
(that does typescript compilation inside using gulp-typescript), using tsc
is also fine to me. Then I changed some of the code (still valid typescript code, I just restructured something) and gulp compilation worked fine. I thought issue is fixed. @anodynos can you please provide some small reproduction where me (and maybe typescript team) can test this issue?
FYI update: I hope I get this tested during Easter with latest TypeScript & ts-node and create a small reproduction repo :-)
I confirm it works with typescript@3.1.6
. I'm using that as a temporary workaround, since we were on typescript@3.3.4000
before. I've also tested with the latest version 3.4.3
and it's still broken.
For all the tests I was using typeorm@0.2.16
Just got hit by this in TS 3.6.2 which Renovate bot just attempted to update to and our pipeline failed. ):
It's not even our own code. It comes from one of the libraries that we use:
error TS2321: Excessive stack depth comparing types 'ElemMatch<?>' and 'ElemMatch<?>'.
error TS2321: Excessive stack depth comparing types 'InternalQuery<?>' and 'InternalQuery<?>'.
error TS2321: Excessive stack depth comparing types 'SiftQuery<?>' and 'SiftQuery<?>'.
https://github.com/crcn/sift.js/blob/ef8c5ca2e4b4277cf79085dd4168dbbe58ea4869/index.d.ts
P.S.: Maybe related? #21592
After upgrading to TS 3.6.2 got this error from a dependency library Typeorm as well. Reverting back to TS@3.5.3 and the issue went away.
node_modules/typeorm/repository/MongoRepository.d.ts:45:5 - error TS2321: Excessive stack depth comparing types '(optionsOrConditions?: string | number | Date | ObjectID | FindOneOptions<Entity> | Partial<Entity> | undefined, maybeOptions?: FindOneOptions<Entity> | undefined) => Promise<...>' and '{ (id?: string | number | Date | ObjectID | undefined, options?: FindOneOptions<Entity> | undefined): Promise<Entity | undefined>; (options?: FindOneOptions<Entity> | undefined): Promise<...>; (conditions?: FindConditions<...> | undefined, options?: FindOneOptions<...> | undefined): Promise<...>; }'.
45 findOne(optionsOrConditions?: string | number | Date | ObjectID | FindOneOptions<Entity> | Partial<Entity>, maybeOptions?: FindOneOptions<Entity>): Promise<Entity | undefined>;
Downgrading to TS@3.5.3 resolved the issue for me as well.
Im experiencing this in one of my projects. package.json had ^3.4.3
. Taking away the hat fixed the issue. Using it with loopback 4, so the error was:
error TS2321: Excessive stack depth comparing types 'HasManyRepository<?>' and 'HasManyRepository<?>'.
I confirm that typescript@3.1.6 solves this issue for TypeORM users (through NestJS).
Like @michaelharrisonroth we've just downgraded to typescript@3.5.3 to solve the issue.
Strange error. For me helped to change version of typescript.
f.e. project without node_modules and build.
npm i
(with typescript@3.5.3)npm run build
it fails with related error- npm i -D typescript@3.5.2
npm run build
it build with success
It works vice versa with no matter what version is it(except 3.6.2)
Same issue here ๐
Just had this issue occur for me while trying to build a typeorm project in AWS CodeBuild and locally in ubuntu 18.04:
Versions:
Node: v10.16.3 & v12.6.0
Typescript: 3.6.2
TypeORM: 0.2.16
Console output:
$ tsc -p .
error TS2321: Excessive stack depth comparing types 'FindConditions' and 'FindConditions'.
error TS2321: Excessive stack depth comparing types 'MongoRepository' and 'Repository'.
controller.ts:170:33 - error TS2589: Type instantiation is excessively deep and possibly infinite.
170 status: MoreThanOrEqual(1)
~~~~~~~~~~~~~~~~~~
node_modules/typeorm/repository/MongoRepository.d.ts:12:22 - error TS2589: Type instantiation is excessively deep and possibly infinite.
12 export declare class MongoRepository extends Repository {
~~~~~~~~~~~~~~~
node_modules/typeorm/repository/MongoRepository.d.ts:45:5 - error TS2321: Excessive stack depth comparing types '(optionsOrConditions?: string | number | Date | ObjectID | FindOneOptions | Partial, maybeOptions?: FindOneOptions) => Promise' and '{ (id?: string | number | Date | ObjectID, options?: FindOneOptions): Promise; (options?: FindOneOptions): Promise; (conditions?: FindConditions, options?: FindOneOptions<...>): Promise<...>; }'.
45 findOne(optionsOrConditions?: string | number | Date | ObjectID | FindOneOptions | Partial, maybeOptions?: FindOneOptions): Promise<Entity | undefined>;
Chiming in with the same error for new version of typeorm.
Node: v12.6.0
typeorm: v0.2.18
typescript: v3.6.2
Downgrading typescript v.3.5.3
And then using @babel/plugin-proposal-decorators for my needed 3.6 feature has worked for now.
Same issue here, wondering what is the meaning of such an issue...
same issue here with "typescript": "^4.2.3"
, node v10.16.0
here error appears on match
export function getCookie(key: string) {
const matches = document.cookie.match(new RegExp(`(?:^|; )${key}=([^;]*)`));
if (matches) {
const [, match] = matches;
const cookieValue = decodeURIComponent(match);
return cookieValue;
}
return null;
}
EDIT :
fixed with Array.from
:
export function getCookie(key: string) {
const matches = document.cookie.match(new RegExp(`(?:^|; )${key}=([^;]*)`));
if (matches) {
const [, match] = Array.from(matches);
const cookieValue = decodeURIComponent(match);
return cookieValue;
}
return null;
}
Facing the same issue
Excessive stack depth comparing types
I am also facing this issue with Prisma when comparing two arraws with the types such as Prisma.<NameOfTheEntity>CreateInput[]
.