#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
}