Skip to content

Exception in quickInfo with conditional types #21611

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
rbuckton opened this issue Feb 3, 2018 · 5 comments
Closed

Exception in quickInfo with conditional types #21611

rbuckton opened this issue Feb 3, 2018 · 5 comments
Assignees
Labels
Bug A bug in TypeScript Fixed A PR has been merged for this issue

Comments

@rbuckton
Copy link
Member

rbuckton commented Feb 3, 2018

TypeScript Version: 2.8.0-dev (master)

Code

interface Awaiters<T> {
    0: T extends PromiseLike<any> ? never : T;
    1: Awaiter<T, 0>;
    [depth: number]: Awaiters<T>[keyof Awaiters<T>];
}
type Awaiter<T, Depth extends number> = T extends PromiseLike<infer U> ? Awaiters<U>[Depth] : never;
type Awaited<T> = Awaiters<T>[keyof Awaiters<T>];

interface BadPromise {
    then(onfulfilled: (value: BadPromise ) => void): any;
}

type T1 = Awaited<BadPromise>;

Repro steps:

  1. Open a new TS file in VS Code with the above source text.
  2. Ensure the VS Code Output window is open with the TypeScript extension output active.
  3. Hover over T1 above.

Expected behavior:

Quick Info reports type T1 = never;

Actual behavior:

Exception in quickInfo:

[Error  - 3:19:57 PM] 'quickinfo' request failed with error.
Error processing request. Maximum call stack size exceeded
RangeError: Maximum call stack size exceeded
    at getSymbolLinks (c:\dev\TypeScript\built\local\tsserver.js:21829:32)
    at instantiateSymbol (c:\dev\TypeScript\built\local\tsserver.js:27969:25)
    at instantiateList (c:\dev\TypeScript\built\local\tsserver.js:27867:34)
    at instantiateSignature (c:\dev\TypeScript\built\local\tsserver.js:27963:165)
    at getBaseSignature (c:\dev\TypeScript\built\local\tsserver.js:26524:24)
    at inferFromSignatures (c:\dev\TypeScript\built\local\tsserver.js:30358:97)
    at inferFromObjectTypes (c:\dev\TypeScript\built\local\tsserver.js:30336:21)
    at inferFromTypes (c:\dev\TypeScript\built\local\tsserver.js:30278:29)
    at inferFromProperties (c:\dev\TypeScript\built\local\tsserver.js:30347:25)
    at inferFromObjectTypes (c:\dev\TypeScript\built\local\tsserver.js:30335:21)
    at inferFromTypes (c:\dev\TypeScript\built\local\tsserver.js:30278:29)
    at inferTypes (c:\dev\TypeScript\built\local\tsserver.js:30129:13)
    at getConditionalType (c:\dev\TypeScript\built\local\tsserver.js:27548:17)
    at instantiateConditionalType (c:\dev\TypeScript\built\local\tsserver.js:28086:20)
    at c:\dev\TypeScript\built\local\tsserver.js:28080:76
    at mapType (c:\dev\TypeScript\built\local\tsserver.js:30926:25)
    at getConditionalTypeInstantiation (c:\dev\TypeScript\built\local\tsserver.js:28080:28)
    at instantiateType (c:\dev\TypeScript\built\local\tsserver.js:28124:28)
    at instantiateList (c:\dev\TypeScript\built\local\tsserver.js:27872:41)
    at instantiateTypes (c:\dev\TypeScript\built\local\tsserver.js:27881:20)
    at instantiateType (c:\dev\TypeScript\built\local\tsserver.js:28109:36)
    at instantiateIndexInfo (c:\dev\TypeScript\built\local\tsserver.js:28137:44)
    at resolveObjectTypeMembers (c:\dev\TypeScript\built\local\tsserver.js:25386:35)
    at resolveTypeReferenceMembers (c:\dev\TypeScript\built\local\tsserver.js:25419:13)
    at resolveStructuredTypeMembers (c:\dev\TypeScript\built\local\tsserver.js:25762:25)
    at getPropertyOfType (c:\dev\TypeScript\built\local\tsserver.js:26085:32)
    at getPropertyTypeForIndexType (c:\dev\TypeScript\built\local\tsserver.js:27363:28)
    at getIndexedAccessType (c:\dev\TypeScript\built\local\tsserver.js:27503:20)
    at instantiateType (c:\dev\TypeScript\built\local\tsserver.js:28121:28)
    at getConditionalType (c:\dev\TypeScript\built\local\tsserver.js:27558:24)
    at instantiateConditionalType (c:\dev\TypeScript\built\local\tsserver.js:28086:20)
    at c:\dev\TypeScript\built\local\tsserver.js:28080:76
    ...
    at mapType (c:\dev\TypeScript\built\local\tsserver.js:30926:25)
    at getConditionalTypeInstantiation (c:\dev\TypeScript\built\local\tsserver.js:28080:28)
    at instantiateType (c:\dev\TypeScript\built\local\tsserver.js:28124:28)
    at instantiateList (c:\dev\TypeScript\built\local\tsserver.js:27872:41)
    at instantiateTypes (c:\dev\TypeScript\built\local\tsserver.js:27881:20)
    at instantiateType (c:\dev\TypeScript\built\local\tsserver.js:28109:36)
    at instantiateIndexInfo (c:\dev\TypeScript\built\local\tsserver.js:28137:44)
    at resolveObjectTypeMembers (c:\dev\TypeScript\built\local\tsserver.js:25386:35)
    at resolveTypeReferenceMembers (c:\dev\TypeScript\built\local\tsserver.js:25419:13)
    at resolveStructuredTypeMembers (c:\dev\TypeScript\built\local\tsserver.js:25762:25)
    at getPropertyOfType (c:\dev\TypeScript\built\local\tsserver.js:26085:32)
    at getPropertyTypeForIndexType (c:\dev\TypeScript\built\local\tsserver.js:27363:28)
    at getIndexedAccessType (c:\dev\TypeScript\built\local\tsserver.js:27503:20)
    at instantiateType (c:\dev\TypeScript\built\local\tsserver.js:28121:28)
    at getConditionalType (c:\dev\TypeScript\built\local\tsserver.js:27558:24)
    at instantiateConditionalType (c:\dev\TypeScript\built\local\tsserver.js:28086:20)
    at c:\dev\TypeScript\built\local\tsserver.js:28080:76
@rbuckton
Copy link
Member Author

rbuckton commented Feb 3, 2018

There is also a similar error reported in getApplicableRefactors:

[Error  - 3:19:59 PM] 'getApplicableRefactors' request failed with error.
Error processing request. Maximum call stack size exceeded
RangeError: Maximum call stack size exceeded
    at resolveStructuredTypeMembers (c:\dev\TypeScript\built\local\tsserver.js:25758:46)
    at getSignaturesOfStructuredType (c:\dev\TypeScript\built\local\tsserver.js:26105:32)
    at getSignaturesOfType (c:\dev\TypeScript\built\local\tsserver.js:26111:20)
    at inferFromSignatures (c:\dev\TypeScript\built\local\tsserver.js:30352:40)
    at inferFromObjectTypes (c:\dev\TypeScript\built\local\tsserver.js:30336:21)
    at inferFromTypes (c:\dev\TypeScript\built\local\tsserver.js:30278:29)
    at inferFromProperties (c:\dev\TypeScript\built\local\tsserver.js:30347:25)
    at inferFromObjectTypes (c:\dev\TypeScript\built\local\tsserver.js:30335:21)
    at inferFromTypes (c:\dev\TypeScript\built\local\tsserver.js:30278:29)
    at inferTypes (c:\dev\TypeScript\built\local\tsserver.js:30129:13)
    at getConditionalType (c:\dev\TypeScript\built\local\tsserver.js:27548:17)
    at instantiateConditionalType (c:\dev\TypeScript\built\local\tsserver.js:28086:20)
    at getConditionalTypeInstantiation (c:\dev\TypeScript\built\local\tsserver.js:28083:20)
    at instantiateType (c:\dev\TypeScript\built\local\tsserver.js:28124:28)
    at instantiateList (c:\dev\TypeScript\built\local\tsserver.js:27872:41)
    at instantiateTypes (c:\dev\TypeScript\built\local\tsserver.js:27881:20)
    at instantiateType (c:\dev\TypeScript\built\local\tsserver.js:28109:36)
    at instantiateIndexInfo (c:\dev\TypeScript\built\local\tsserver.js:28137:44)
    at resolveObjectTypeMembers (c:\dev\TypeScript\built\local\tsserver.js:25386:35)
    at resolveTypeReferenceMembers (c:\dev\TypeScript\built\local\tsserver.js:25419:13)
    at resolveStructuredTypeMembers (c:\dev\TypeScript\built\local\tsserver.js:25762:25)
    at getPropertyOfType (c:\dev\TypeScript\built\local\tsserver.js:26085:32)
    at getPropertyTypeForIndexType (c:\dev\TypeScript\built\local\tsserver.js:27363:28)
    at getIndexedAccessType (c:\dev\TypeScript\built\local\tsserver.js:27503:20)
    at instantiateType (c:\dev\TypeScript\built\local\tsserver.js:28121:28)
    at getConditionalType (c:\dev\TypeScript\built\local\tsserver.js:27558:24)
    at instantiateConditionalType (c:\dev\TypeScript\built\local\tsserver.js:28086:20)
    at getConditionalTypeInstantiation (c:\dev\TypeScript\built\local\tsserver.js:28083:20)
    at instantiateType (c:\dev\TypeScript\built\local\tsserver.js:28124:28)
    at instantiateList (c:\dev\TypeScript\built\local\tsserver.js:27872:41)
    at instantiateTypes (c:\dev\TypeScript\built\local\tsserver.js:27881:20)
    at instantiateType (c:\dev\TypeScript\built\local\tsserver.js:28109:36)
    at instantiateIndexInfo (c:\dev\TypeScript\built\local\tsserver.js:28137:44)
    at resolveObjectTypeMembers (c:\dev\TypeScript\built\local\tsserver.js:25386:35)
    at resolveTypeReferenceMembers (c:\dev\TypeScript\built\local\tsserver.js:25419:13)
    at resolveStructuredTypeMembers (c:\dev\TypeScript\built\local\tsserver.js:25762:25)
    at getPropertyOfType (c:\dev\TypeScript\built\local\tsserver.js:26085:32)
    at getPropertyTypeForIndexType (c:\dev\TypeScript\built\local\tsserver.js:27363:28)
    at getIndexedAccessType (c:\dev\TypeScript\built\local\tsserver.js:27503:20)
    at instantiateType (c:\dev\TypeScript\built\local\tsserver.js:28121:28)
    at getConditionalType (c:\dev\TypeScript\built\local\tsserver.js:27558:24)
    at instantiateConditionalType (c:\dev\TypeScript\built\local\tsserver.js:28086:20)
    at getConditionalTypeInstantiation (c:\dev\TypeScript\built\local\tsserver.js:28083:20)
    ...

@mhegazy
Copy link
Contributor

mhegazy commented Feb 5, 2018

@ahejlsberg can you please take a look.

@mhegazy mhegazy added the Bug A bug in TypeScript label Feb 5, 2018
@mhegazy mhegazy added this to the TypeScript 2.8 milestone Feb 5, 2018
@alitaheri
Copy link

I Also got an error which might be related, can't pin down what part of the code causes it:

D:\projects\csd\sales\node_modules\typescript\lib\typescript.js:26345
                symbol = resolveName(location || name, name.escapedText, meaning, ignoreErrors ? undefined : message, name, /*isUse*/ true);
                         ^
RangeError: Maximum call stack size exceeded
    at resolveEntityName (D:\projects\csd\sales\node_modules\typescript\lib\typescript.js:26345:26)
    at resolveTypeReferenceName (D:\projects\csd\sales\node_modules\typescript\lib\typescript.js:31076:20)
    at getTypeFromTypeReference (D:\projects\csd\sales\node_modules\typescript\lib\typescript.js:31199:30)
    at getTypeFromTypeNode (D:\projects\csd\sales\node_modules\typescript\lib\typescript.js:32286:28)
    at getIndexInfoOfSymbol (D:\projects\csd\sales\node_modules\typescript\lib\typescript.js:30900:59)
    at resolveAnonymousTypeMembers (D:\projects\csd\sales\node_modules\typescript\lib\typescript.js:29806:39)
    at resolveStructuredTypeMembers (D:\projects\csd\sales\node_modules\typescript\lib\typescript.js:30000:25)
    at getPropertiesOfObjectType (D:\projects\csd\sales\node_modules\typescript\lib\typescript.js:30018:24)
    at propertiesIdenticalTo (D:\projects\csd\sales\node_modules\typescript\lib\typescript.js:33912:40)
    at propertiesRelatedTo (D:\projects\csd\sales\node_modules\typescript\lib\typescript.js:33785:28)
    at structuredTypeRelatedTo (D:\projects\csd\sales\node_modules\typescript\lib\typescript.js:33742:38)
    at recursiveTypeRelatedTo (D:\projects\csd\sales\node_modules\typescript\lib\typescript.js:33555:64)
    at isIdenticalTo (D:\projects\csd\sales\node_modules\typescript\lib\typescript.js:33290:28)
    at isRelatedTo (D:\projects\csd\sales\node_modules\typescript\lib\typescript.js:33191:28)
    at checkTypeRelatedTo (D:\projects\csd\sales\node_modules\typescript\lib\typescript.js:33090:26)
    at isTypeRelatedTo (D:\projects\csd\sales\node_modules\typescript\lib\typescript.js:33062:24)
    at isTypeIdenticalTo (D:\projects\csd\sales\node_modules\typescript\lib\typescript.js:32728:20)
    at fillMissingTypeArguments (D:\projects\csd\sales\node_modules\typescript\lib\typescript.js:30555:44)
    at getTypeAliasInstantiation (D:\projects\csd\sales\node_modules\typescript\lib\typescript.js:31029:117)
    at getTypeFromTypeAliasReference (D:\projects\csd\sales\node_modules\typescript\lib\typescript.js:31050:24)
    at getTypeReferenceTypeWorker (D:\projects\csd\sales\node_modules\typescript\lib\typescript.js:31118:24)
    at getTypeReferenceType (D:\projects\csd\sales\node_modules\typescript\lib\typescript.js:31083:24)

TS: 2.8.0-dev.20180206

@mhegazy
Copy link
Contributor

mhegazy commented Feb 8, 2018

I can not get the exception with latest from master with @rbuckton's sample. @alitaheri can you give typescript@next a try tomorrow, and let us know if you are still seeing this issue? if so a repro would be appreciated.

@mhegazy mhegazy added the Needs More Info The issue still hasn't been fully clarified label Feb 8, 2018
@KiaraGrouwstra
Copy link
Contributor

@mhegazy looks like @weswigham also bumped into this at #21613.

@mhegazy mhegazy removed the Needs More Info The issue still hasn't been fully clarified label Feb 12, 2018
@mhegazy mhegazy added the Fixed A PR has been merged for this issue label Mar 9, 2018
@mhegazy mhegazy closed this as completed Mar 9, 2018
@microsoft microsoft locked and limited conversation to collaborators Jul 25, 2018
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Bug A bug in TypeScript Fixed A PR has been merged for this issue
Projects
None yet
Development

No branches or pull requests

5 participants