[Linting] Introduce ESLint rules for better TypeScript code

As we use TypeScript more and more extensively in XS, I propose adding a new set of rules for ESLint (which would also apply to Cristal): the recommended-type-checked set from typescript-eslint.

This enables lots of new relevant rules, enforcing following best practices that haven’t been followed in the codebase so far, such as enforcing correct use of Promise objects, avoiding incorrect type assertions, and generally preventing unsafe object manipulations based on types.