The canonical answer to this question is at microsoft/TypeScript#29729 and microsoft/TypeScript#33471.
The union of string literal types with string, such as "test1" | "test2" | string, is equivalent to string. There's no value of type A which can't be assigned to string and vice versa. Furthermore, such types are eagerly reduced to string by the compiler. This behavior is absolutely correct from the point of view of the type system, but unfortunately it doesn't really do what you want from the point of view of documentation.
Ideally you'd like a way to prevent the eager reduction of the union (or at least have the compiler keep track of the pieces of the union for IntelliSense); there is no officially supported way to do this, but there are workarounds:
There's a suggestion in microsoft/TypeScript#29729 to use something like a branded primitive (as described in this TS FAQ entry) for this effect:
type OtherString = string & {};
Here, OtherString is of type string & {}; this happens to be equivalent to string (the "empty object type" {} matches all values except null and undefined... yes, even primitives like string) but the compiler doesn't simplify it, and so it keeps track of the union of literals:
type A = "test1" | "test2" | OtherString;
// type A = "test1" | "test2" | OtherString
// not reduced
That gives you both the behavior and the hinting you're looking for:
function foo(a: A) { }
foo("test1"); // okay
foo("test2"); // okay
foo("test3"); // okay
foo("") //
// ^ hint here, test1 and test2

Of course, this is just a workaround and there are some situations in which OtherString might fail to behave the way you want; so be careful!
Playground link to code
type A = 'test1' | 'test2' | Omit<string, 'test1' | 'test2'>to preserve the type of A?Omit<string, 'test1' | 'test2'>does not mean "anystringexcept"test1"or"test2"; if it means anything, it means "anystringwithout known properties namedtest1ortest2", which is... werid. There is an official issue in GitHub about this at microsoft/TypeScript#29729, and I've submitted an answer which explains what's going on here.