Обращение к необязательным свойствам объекта в цикле

У меня есть массив, в который опционально поступают определенные свойства. Как можно обращаться к каждому из них, используя цикл? Пишу плагин, в котором будет responsive свойство, сами понимаете, для адаптации под разные устройства динамически. Eslint роняет меня об это предупреждение:

const exampleObj: responsiveProps Элемент неявно имеет тип "any", так как выражение типа "string" не может использоваться для индексации типа "responsiveProps". В типе "responsiveProps" не обнаружена сигнатура индекса с параметром типа "string"

                    type responsiveProps = {
                        heightRow?: string,
                        widthColumn?: string,
                        countColumns?: number,
                        countRows?: number,
                        rowGap?: number
                    }

                    const exampleObj: responsiveProps = {
                        heightRow: "300px",
                        countRows: 3
                    }
                    
                    for (const key in exampleObj) {
                        if (Object.prototype.hasOwnProperty.call(exampleObj, key) 
                         && exampleObj.hasOwnProperty(key)) {
                            // здесь exampleObj[key] будет выбивать вышеупомянутое предупреждение 
                            const responsiveProp = exampleObj[key];
                            console.log(responsiveProp)
                        }
                    }

                    //получается сделать только так:
                    if(exampleObj.countColumns)
                        /* действие */
                        console.log(exampleObj.countColumns);
                    if(exampleObj.countRows)
                        /* действие */
                        console.log(exampleObj.countRows)

Вот еще одна попытка:

                    for (let i = 0; i < Object.keys(exampleObj).length; i++) {
                        const nameProperty: string = Object.keys(exampleObj)[i];

                        if(exampleObj.hasOwnProperty(nameProperty)) {
                            //да, здесь снова предупреждение
                            console.log(exampleObj[nameProperty]);
                        }
                    }

Как мне кажется, здесь было больше вероятности на успех. Хотя typescript'у определенно без разницы на вежливом, кому и что казалось

Дополнение к вопросу:

                    const exampleObj: responsiveProps = {
                        heightRow: "300px",
                        countRows: 3
                    }
                    const needfulResponsiveProps: responsiveProps = {};

                    for (const key of Object.keys(exampleObj) as (keyof responsiveProps)[]) {
                        //Тип "string | number | undefined" не может быть назначен для типа "undefined".
  Тип "string" не может быть назначен для типа "undefined"
                        needfulResponsiveProps[key] = exampleObj[key]
                    }

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

Автор решения: Qwertiy
for (const key of Object.keys(obj) as (keyof typeof obj)[])
for (const key of Object.keys(obj) as (keyof responsiveProps)[])
→ Ссылка