@aral I don't understand.
```js
class Base {
bla() {
console.log("base");
}
};
class Derived extends Base {
bla() {
console.log("derived");
}
};
/**
* @template {Base} T
* @param {T} base
*/
function fun(base) {
base.bla();
}
fun(new Base());
fun(new Derived());
/**
*
* @param {typeof Base} cls
*/
function makeBase(cls) {
return new cls();
}
makeBase(Base).bla();
makeBase(Derived).bla();
```