Skip to content

Stack overflow with circular type parameter default #18234

Closed
@ahejlsberg

Description

@ahejlsberg

Issue originally reported by @bcherny in #17036 (comment).

Repro:

interface A<B = A> {
  a: B
}

Compiling the above causes a stack overflow:

RangeError: Maximum call stack size exceeded
    at getSymbol (c:\ts\built\local\tsc.js:23459:27)
    at resolveNameHelper (c:\ts\built\local\tsc.js:23710:38)
    at resolveName (c:\ts\built\local\tsc.js:23596:20)
    at resolveEntityName (c:\ts\built\local\tsc.js:24285:26)
    at resolveTypeReferenceName (c:\ts\built\local\tsc.js:29082:20)
    at getTypeFromTypeReference (c:\ts\built\local\tsc.js:29179:30)
    at getTypeFromTypeNode (c:\ts\built\local\tsc.js:30072:28)
    at getDefaultFromTypeParameter (c:\ts\built\local\tsc.js:28320:66)
    at getMinTypeArgumentCount (c:\ts\built\local\tsc.js:28591:26)
    at getTypeFromClassOrInterfaceReference (c:\ts\built\local\tsc.js:28999:44)
    at getTypeReferenceTypeWorker (c:\ts\built\local\tsc.js:29112:24)
    at getTypeReferenceType (c:\ts\built\local\tsc.js:29089:24)
    at getTypeFromTypeReference (c:\ts\built\local\tsc.js:29180:28)
    at getTypeFromTypeNode (c:\ts\built\local\tsc.js:30072:28)
    at getDefaultFromTypeParameter (c:\ts\built\local\tsc.js:28320:66)
    at getMinTypeArgumentCount (c:\ts\built\local\tsc.js:28591:26)
    at getTypeFromClassOrInterfaceReference (c:\ts\built\local\tsc.js:28999:44)
    at getTypeReferenceTypeWorker (c:\ts\built\local\tsc.js:29112:24)
    at getTypeReferenceType (c:\ts\built\local\tsc.js:29089:24)
    at getTypeFromTypeReference (c:\ts\built\local\tsc.js:29180:28)
    at getTypeFromTypeNode (c:\ts\built\local\tsc.js:30072:28)
    at getDefaultFromTypeParameter (c:\ts\built\local\tsc.js:28320:66)
    at getMinTypeArgumentCount (c:\ts\built\local\tsc.js:28591:26)
    at getTypeFromClassOrInterfaceReference (c:\ts\built\local\tsc.js:28999:44)
    at getTypeReferenceTypeWorker (c:\ts\built\local\tsc.js:29112:24)
    at getTypeReferenceType (c:\ts\built\local\tsc.js:29089:24)
    at getTypeFromTypeReference (c:\ts\built\local\tsc.js:29180:28)
    at getTypeFromTypeNode (c:\ts\built\local\tsc.js:30072:28)
    at getDefaultFromTypeParameter (c:\ts\built\local\tsc.js:28320:66)
    at getMinTypeArgumentCount (c:\ts\built\local\tsc.js:28591:26)
    at getTypeFromClassOrInterfaceReference (c:\ts\built\local\tsc.js:28999:44)
    at getTypeReferenceTypeWorker (c:\ts\built\local\tsc.js:29112:24)
    at getTypeReferenceType (c:\ts\built\local\tsc.js:29089:24)
    at getTypeFromTypeReference (c:\ts\built\local\tsc.js:29180:28)
    at getTypeFromTypeNode (c:\ts\built\local\tsc.js:30072:28)
    at getDefaultFromTypeParameter (c:\ts\built\local\tsc.js:28320:66)
    at getMinTypeArgumentCount (c:\ts\built\local\tsc.js:28591:26)
    at getTypeFromClassOrInterfaceReference (c:\ts\built\local\tsc.js:28999:44)
    at getTypeReferenceTypeWorker (c:\ts\built\local\tsc.js:29112:24)
    at getTypeReferenceType (c:\ts\built\local\tsc.js:29089:24)
    at getTypeFromTypeReference (c:\ts\built\local\tsc.js:29180:28)
    at getTypeFromTypeNode (c:\ts\built\local\tsc.js:30072:28)
    at getDefaultFromTypeParameter (c:\ts\built\local\tsc.js:28320:66)
    at getMinTypeArgumentCount (c:\ts\built\local\tsc.js:28591:26)

Metadata

Metadata

Assignees

No one assigned

    Labels

    DuplicateAn existing issue was already created

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions