Edited:
Having union types like these:
type SomeElements = 'element1' | 'element2'; type OtherElements = 'element3' | 'element4' | 'element1'; type MoreElements = 'element5' | 'element6'; const someElements: { [key in SomeElements]: key; } = { element1: 'element1', element2: 'element2', }; const otherElements: { [key in OtherElements]: key; } = { element3: 'element3', element4: 'element4', element1: 'element1' }; const moreElements: { [key in MoreElements]: key; } = { element5: "element5", element6: "element6", }; Is it possible to use type checking to know at compile time that allElements contains duplicate entries to avoid having to filter the array at runtime?
type Elements = SomeElements | OtherElements | MoreElements; const allElements: Elements[] = ( Object.values(someElements) as Elements[] ).concat( Object.values(otherElements) ).concat( Object.values(moreElements) ); /* allElements = ["element1", "element2", "element3", "element4", "element1", "element5", "element6"] */ const removeDuplicates = (strings: Elements[]) => strings.filter( (value, index) => strings.indexOf(value) === index ); const allElementsFiltered = removeDuplicates( ( Object.values(someElements) as Elements[] ).concat( Object.values(otherElements) ).concat( Object.values(moreElements) ) ); /* allElementsFiltered = ["element1", "element2", "element3", "element4", "element5", "element6"] */