TypeScript: generics, utility types, narrowing · InterviewLane