Good list, but type guards are just as unsafe as type assertions. I wrote a blog post about this: https://fnune.com/typescript/2019/02/27/typescript-series-2-...
TypeScript will believe what you tell it in a type guard's signature without looking at the body of the function further than "does it return a boolean".