I don't get why "type circular reference itself" sometimes appears and sometimes don't.
Example:
type Item = string;
type CollapsableItem = (Item | CollapsableItem)[]; // Fine
type CollapsableItem = [(Item | CollapsableItem)]; // Fine
type CollapsableItem = [Item, ...(Item | CollapsableItem)]; // TS2456: Type alias 'CollapsableItem' circularly references itself.
The only different in the last one is that I enforced the first element in the array to be Item. Why did that all of sudden cause a circular reference type error?
In general, when does a "type circular references itself" error occur?