могу ли я иметь свойство в объекте, который является массивом из нескольких объектов в typescript?

#typescript

#typescript

Вопрос:

Я конвертирую свой код из Javascript в Typescript, мой приведенный ниже код работает на Javascript, но в Typescript есть ошибка

вот код

 const jsonData = {
        query: "keywords in here",
        page: {size: 10, current: 1},
        options: {
            all: [
                { datetimestart: {from: currentDateTimeInISOString}},
                { price: {from: 0, to: (freeEventsOnly ? 0.1 : 99999999999) }},
            ],
        },
};

if (meetSomeCondition) {
   jsonData.options.all.push({ city: domicile }); // <--- try to append another object to array
}
 

как вы можете видеть, у меня есть вызываемый объект jsonData , и у этого объекта есть вызываемое свойство options , которое является объектом, у которого вызывается свойство all , представляющее собой массив из нескольких объектов

а затем попытайтесь добавить другой объект в массив, но у меня эта ошибка

введите описание изображения здесь

кажется, я нажимаю на объект с другим типом данных? как это решить?

Ответ №1:

Литералы не могут быть разных типов. Typescript выводит тип объединения из всех элементов массива в литерале (вы можете увидеть это в сообщении об ошибке). Вы можете определить all выше options как Record<string, any>[] :

 const all: Record<string, any>[] = [
                { datetimestart: {from: currentDateTimeInISOString}},
                { price: {from: 0, to: (freeEventsOnly ? 0.1 : 99999999999) }},
            ]
const jsonData = {
        query: "keywords in here",
        page: {size: 10, current: 1},
        options: {
            all,
        },
};
if (meetSomeCondition) {
   jsonData.options.all.push({ city: domicile }); // <--- try to append another object to array
}