Start here. This is the direct spoken answer to practice first.
Overview
These forms may appear beside the same expression, but they make different promises and preserve different amounts of inference.
A type annotation declares the type a variable or parameter should have and checks assignments against it. A type assertion tells TypeScript to treat a value as another type without runtime validation, so I reserve it for cases where I have evidence the compiler cannot express. satisfies checks that an expression is compatible with a type while usually preserving the expression's more specific inferred type.