Не выходит создать объект, состоящий из своиств другого объекта

Рейтинг: 0Ответов: 1Опубликовано: 28.07.2023
type someType = {
    a: string,
    b: boolean,
    c: number
}

const fields: (keyof someType)[] = ['a', 'b', 'c']

const foo: someType = {
    a: '',
    b: false,
    c: 5
}

const bar: Partial<someType> = {}

for (const field of fields ) {
    if (field in foo) {
        bar[field] = foo[field]
    }
}

При присвоении bar[field] = foo[field] получаю ошибку

Тип "string | number | boolean" не может быть назначен для типа "undefined". Тип "string" не может быть назначен для типа "undefined".ts(2322)

Объясните пожалуйста, что не так и как надо.

Ответы

▲ 0

Я внес некоторые изменения, проблема в том что ты не можешь использовать переменную у которой тип например string как индекс для объекта. По этому тебе надо убедить TypeScript в том что эта переменная может быть использована как индекс, вот самый быстрый способ.

type someType = {
    a: string,
    b: boolean,
    c: number
}

const fields: (keyof someType)[] = ['a', 'b', 'c']

const foo: someType = {
    a: '',
    b: false,
    c: 5
}

const bar: Partial<someType> = {}

for (const field of fields ) {
    if (field in foo) {
        bar[field as keyof typeof fields] = foo[field]
    }
}