What are the benefits of type constraints in protocol extensions?

I'm a programming beginner, please excuse the naive question. Swift is my first language and I have no reference (other programming languages) to compare the benefits of the type Constrains on protocol extension.

Personally, I just feel confused and weird. Why the Type constraint on a protocol extension exist? What's the meaning of it?

Funny enough, the "constraint" actually adds lots of power to extensions.

Without the constraint that the conforming type of CustomStringConvertible be a TeamRecord, the compiler would have no way of guaranteeing that the wins and losses properties will exist.

Type constraints (in general, not just on protocol extensions) do limit the selection of types that can possibly conform to the protocol, but in exchange, they buy you compiler enforcement that whatever properties/methods you invoke will be available in the conforming type.

Consider another example, the keys of a Dictionary must be Hashable. The Dictionary relies on being able to get hash values of keys to determine how to store them. The constraint is very important. Without it, I could try using a custom struct/object as a Dictionary key. My custom struct/object can't be hashed, so what is the program to do?