Перебор возможных вариантов интерфейса boolean

Я имею следующий интерфейс

interface test {
value1: boolean;
value2: boolean;
value3: boolean;
/*...*/}

Каким путём легче всего создать его реализации с каждым возможным вариантом?


Ответы (1 шт):

Автор решения: Hitulya

Это работает:

interface someInterface {
    someValue1: boolean;
    someValue2: boolean;
    someValue3: boolean;
}

function logAllCombinations(o: any) {
    const objectProperties = Object.keys(o);
    const combinationsCount = Math.pow(2, objectProperties.length);

    for(let i = 0; i < combinationsCount; i++) { 
        for(let j = 0; j < objectProperties.length; j++) {
            o[objectProperties[j]] = Boolean((i >> j) & 1);
        }

        console.log(o);
    }
}

const interfaceObject: someInterface = {
    someValue1: false,
    someValue2: false,
    someValue3: false
};

logAllCombinations(interfaceObject);

Вывод:

{ someValue1: false, someValue2: false, someValue3: false }
{ someValue1: true, someValue2: false, someValue3: false }
{ someValue1: false, someValue2: true, someValue3: false }
{ someValue1: true, someValue2: true, someValue3: false }
{ someValue1: false, someValue2: false, someValue3: true }
{ someValue1: true, someValue2: false, someValue3: true }
{ someValue1: false, someValue2: true, someValue3: true }
{ someValue1: true, someValue2: true, someValue3: true }
→ Ссылка