/**
* Constructor type.
* @interface Constructor
* @extends Function
* @template T
* @tstype new(...params: any[]): T; prototype: T;
*/
/**
* Properties type.
* @typedef Properties
* @template T
* @type {Object.<string,*>}
* @tstype { [P in keyof T]?: T[P] }
*/