SvelteKit

Conditional type switch on Array vs Object vs subtyped object

type DetectArray<T> = number extends keyof T ? true : false;
DetectArray<string[]> // true
DetectArray<{ [k: number]: unknown } // true

type DetectStringObj<T> = string extends keyof T ? true : false;
DetectArray<{ [k: string]: unknown } // true
DetectArray<{ x: string } // false