@TypeChecked just checks types during compiling, but compiled code behaves same as without @TypeChecked
@CompileStatic checks similar to @TypeChecked, but also modifies the code to be type-safe at runtime, meaning methods using dynamic programming will break.