Skip to content

keyof of 'mixed' class equals to string | number #31143

Open
@int0h

Description

@int0h

TypeScript Version: 3.4.3 or 3.5.0-dev.20190427

Search Terms: keyof, anonymous class

Code

type AnyClass = new (...args: any[]) => any;

const mixin = <T extends AnyClass>(Class: T) => class extends Class {a: string};
const Cl = mixin(class {b = 123});
const inst = new Cl();

inst. //  <- IntelliSense works fine here and suggests 'a' and 'b' properties

type Keys = keyof typeof inst; // Keys = string | number

Expected behavior:
Keys to be equal to 'a' | 'b'

Actual behavior:
Keys to be equal to string | number

Playground Link: ts-playground

Description:
I'm sorry if that is a known bug ot expected behaviour. I did not find a duplicate.
Class C is a result of extension of some other class A provided as a function argument and class B which is declared inside the function body. Such class C works fine for the most part, but keyof InstanceType<typeof C> returns string | number.

image

While IntelliSense works fine:
image

I'll be glad if you suggest any workarounds for this issue.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions