What are you expecting those last two statements to do?
The first statement makes all Strings conform to Error. Thus, extension String where Self: Error is meaningless: all Strings conform to Error. The same applies to the typealias (though additionally you cannot place where clauses on non-generic typealias statements).
I don't know what you're trying to do, but neither of the things you did here are "limitations of the type system": they are correctly stating that your refinements don't make any sense.
You can imagine that extension String: Error is declared in one module. Now I want to extend that subtype, which has both properties of string and error. How would you do it from another module? Do you think it is possible to do redeclaration?