#javascript #angular #typescript
Вопрос:
В следующем примере я пытаюсь назначить асинхронные функции const как обещания свойству родительского объекта, чтобы к нему можно было лениво обращаться в дальнейшем коде, таком как функция fn: async GetItem() в примере.
Но при присвоении констант свойствам «Подразделы» я получаю ошибку:
В типе «ItemI» отсутствуют следующие свойства типа «Обещание»: затем, наконец, поймайте [Symbol.toStringTag]ts(2739)
Не могли бы вы объяснить, пожалуйста, чего мне не хватает и как это исправить? Спасибо.
// interface for each item object
interface ItemI {
id: number,
name: string,
subItems?: Promise<ItemI>[]
}
// item object 1
const item_A01: ItemI = {
id: 1,
name: 'item_A01'
}
// item object 2
const item_A02: ItemI = {
id: 2,
name: 'item_A02'
}
// async constant - Promise of each item object
async const async_item_A01 = (): ItemI => { return item_A01 };
async const async_item_A02 = (): ItemI => { return item_A02 };
// parent item with the Promissed item objects
async const parentItem: ItemI = {
id: 0,
name: 'parentItem',
// ERROR:
// Type 'ItemI' is missing the following properties
// from type 'Promise<ItemI>':
// then, catch, finally, [Symbol.toStringTag] ...
subItems: [async_item_A01(),
async_item_A02()
]
}
// function to work with an actual item
// from the Promissed / async constants
// by the provided index
async function getItem (itemIndex: number) {
const resolved_item: ItemI = await parentItem.subItems[itemIndex];
console.log('my resolved item is:', resolved_item.name);
}
Ответ №1:
Это функция, которая async
не должна быть const
. Кроме того, тип возвращаемого значения должен быть Promise<ItemI>
:
const async_item_A01 = async (): Promise<ItemI> => { return item_A01 };
const async_item_A02 = async (): Promise<ItemI> => { return item_A02 };
Кроме того, удалите async
здесь:
const parentItem: ItemI = {
id: 0,
name: 'parentItem',
subItems: [
async_item_A01(),
async_item_A02()
]
}
Комментарии:
1. Ну, конечно, оценил …
2. Вообще никаких проблем 🙂