Notes on TypeScript: Conditional Types