Búsqueda de sitios web

typescript - ¿Puedo crear un tipo de array que deba contener todos los miembros de una unión dada?


Dada una unión como esta:

type MyUnion = 'foo' | 'bar' | 'baz';

¿Cómo puedo crear un tipo como StrictArrayOfUnion? Para que pueda obtener los siguientes resultados:

type MyStrictUnionType = StrictArrayOfUnion<MyUnion>;

// Arrays that do what I want
const a: MyStrictUnionType = ['foo', 'bar', 'baz'];
const b: MyStrictUnionType = ['foo', 'baz', 'bar']; // Passes since I assume there is no way to check ordering on a union

// However, all of these should not be allowed
const c: MyStrictUnionType = ['foo', 'bar']; // Fails due to missing 'baz'
const d: MyStrictUnionType = ['foo', 'foo', 'baz']; // Fails due to missing 'bar'
const e: MyStrictUnionType = ['foo', 'boo', 'baz']; // Fails due to missing 'bar'

No me importa el orden aquí, solo quiero comprobar si faltan elementos de la unión en el arreglo.

Esencialmente quiero una versión en TS de una lógica como esta:

const myUnion = ["foo", "bar", "baz"]; // this would be a Union in a TS scenario
const hasAllUnionMembers = (arr) => myUnion.every(unionMember => arr.includes(unionMember));

Artículos relacionados