Обращение к необязательным свойствам объекта в цикле
У меня есть массив, в который опционально поступают определенные свойства. Как можно обращаться к каждому из них, используя цикл? Пишу плагин, в котором будет 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 шт):
for (const key of Object.keys(obj) as (keyof typeof obj)[])
for (const key of Object.keys(obj) as (keyof responsiveProps)[])