Master TypeScript: tsconfig strict mode, interfaces & type aliases, generics & utility types, type gymnastics, control flow analysis, and decorators