Skip to content

The property prototype of an abstract constructor type is unavoidably of type any.Β #56801

Closed
@miguel-leon

Description

@miguel-leon

πŸ”Ž Search Terms

abstract constructor prototype type any

πŸ•— Version & Regression Information

Latest version as of today.

⏯ Playground Link

https://www.typescriptlang.org/play?#code/MYGwhgzhAECC0G8C+AoFAXAngBwKZwGEB7AOwnQCcBXYdIi6AXmhNwHcAKASiYD44A3Gix5CpctVr0AkiXS4KEXLQCWpJtA6tOPRv1g8AZImjYKROiNwAuONCRCUKuQoBmYYPljEylGnQoAJVwAW1wAExUIxBRoOJZ2bltYIXjTc0scG0EUVGEsuFgAIwkPdB8Jf3oNMBLKMoSdPhynFwp3TzhpEOwiKBUikFwKvykGBFj42tLaRqTBaAB6RegFcwpJuLMLCyzkoTz80QB9AEYNDisiVzguAG0Acm3MvAeAXQElleB6CmV0ZJHfDHABMGm84lGAUez12rw+X2gzh+FD+tFsYBImCB0GOAGZwSNJAFZPJFP81CQYRk4bh3p9lkiSCi0QDoJjsRgCscACyEyHE+jBMKRCLUnZWemIln-QFck4AVnBxRm5QFVQo4pedIRjORv1l7KxKCAA

πŸ’» Code

class A {}

type AConstructor = new() => A;

type AConstructorIntersection = (new() => A) & { prototype: A };

interface AConstructorRemedied {
    new(): A;
    prototype: A;
}


type AAbstractConstructor = abstract new() => A;

interface AImpossibleConstructor {
    abstract new(): A; // error
    prototype: A;
}



type _1 = (typeof A)['prototype']; // correct: A

type _2 = AConstructor['prototype']; // incorrect: any

type _3 = AConstructorIntersection['prototype']; // incorrect: any

type _4 = AConstructorRemedied['prototype']; // correct: A

type _5 = AAbstractConstructor['prototype']; // incorrect: any

πŸ™ Actual behavior

There's no way of making the type of prototype something other than any, not even with an intersection.

πŸ™‚ Expected behavior

A way to make the type of prototype something other than any. It seems that constructor types have a hidden prototype of type any. Shouldn't it be of type unknown so that at least the intersection works? (or wouldn't it be better for it to be the same type as InstanceType directly?)

Additional information about the issue

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions