Can an element in Angular 2+ be dirty without being touched?

Yes.

By default Angular checks the dirty state on changes. So as the user types, the value is changed and the dirty state is set to true.

The touched state is not changed until the user leaves the field. It's like an "on lost focus" event. So as the user types, the dirty state is true but the touched state will be false. When the user leaves the field, both the dirty state and touched state will be true.

So if you want an error message to appear/disappear as the user is typing OR if the user just tabs/moves through the field, you will want to check both.