type ObjectKeys = // prettier-ignore T extends object ? (keyof T)[] : T extends number ? [] : T extends Array | string ? string[] : never; interface ObjectConstructor { keys(o: T): ObjectKeys; getOwnPropertyNames(o: T): (keyof T | "constructor")[]; } type Func = (...args: any[]) => any; interface Element { setAttribute(qualifiedName: string, value: boolean | string | number): void; } type LowerKeys = keyof { [P in keyof T as Lowercase]: P; }; interface Window { /** Reference to HTMLStyleElement with WUP-styles */ WUPrefStyle?: HTMLStyleElement; }