You're making the same kind of category mistake as in Generic type to get enum keys as union string in typescript?. The typeof type operator acts on values, not types. If you have const v: V, you can write typeof v but you cannot write typeof V. Notice that types and values live in different namespaces, so you can have const X = {a: "abc"}; type X = {b: number}; and write typeof X, but you'll be getting the type of the const (like {a: string}) and not the type of the type. So if there happens to be a type with the same name as a value, you still can't access it with typeof.
For a class declaration like class Foo {}, there will be both a value and a type named Foo. The value is the class constructor (e.g., new Foo()) while the type is the type of a class instance (e.g., const f: Foo = ). But you can't use the name of the type to get to the type of the value. If you have a generic type like type ChildClassOf<T> = you can't pass in Foo as T and then write something like typeof T to get the type of the value named Foo. There is no typeof T if T is just a value.
Whatever you pass to ChildClassOf needs to be a type, and it needs to know enough about the constructor type to determine both the constructor parameters and the instance type. That can't be the instance type because a class instance type doesn't know anything about its constructor type. While at runtime you can use (new Foo()).constructor to recover Foo, the type of the constructor property in TypeScript is just Function. See microsoft/TypeScript#3841 for why this is.
Instead, you'll have to pass in the constructor type. The constructor type knows about the instance type and the constructor parameter list. That means you can write:
type ChildClassOf<BaseClass extends abstract new (...args: any) => any> =
new (...args: ConstructorParameters<BaseClass>) => InstanceType<BaseClass>;
using both the ConstructorParameters and InstanceType utility types. You could also write
type ChildClassOf<BaseClass extends abstract new (...args: any) => any> =
BaseClass extends abstract new (...args: infer A) => infer I ? new (...args: A) => I : never
Now you can use ChildClassOf<> like this:
let constructorOfSomething: ChildClassOf<typeof Something>;
// let constructorOfSomething: new () => Something
Note that the constructor type is typeof Something, which is only possible because Something is the name of the class constructor value.
Playground link to code
new (...args: ConstructorParameters<typeof AbstractClass>) => AbstractClassevery time.classstatements is a red herring; you can't generalize from it. Types and values live in separate namespaces. See this q/a. The closest to this is to pass the type of the constructor, not an instance (because constructor types do know their instance types), as shown in this playground link. Does that fully address the question? If so I'll write an answer or find a duplicate. If not, what's missing?