Использование машинописного текста 3 в угловой структуре 7.
Я пытаюсь подготовить элементы локального массива Store для firebase, используя свойство Id объекта в качестве ключа в объекте переноса, и наоборот при извлечениииз firestore.
Я настроил интерфейс, который должен работать с любым из моих локальных элементов Store, поскольку все они имеют свойство id:
interface localItem {id:string, [x:string]:any}
и эквивалент Firebase, каквсе они используют идентификатор в качестве ключа
interface firebaseItem {[id:string]:{[x:string]:any}}
Я пытаюсь перебрать элемент firebase, и снова превращаю его в массив, но получаю ошибку типа:
unwrapForLocalStore<T extends localItem>(firebaseItems:firebaseItem):T[]{
let itemArray: T[] = [];
for(let item in firebaseItems){
let newItem:T = {id:item, ...firebaseItems[item]}
/*
[ts] Type '{ id: string; }' is not assignable to type 'T'. [2322]
let newItem: T extends localItem
*/
itemArray.push(newItem)
}
return itemArray
}
Я прочитал документы по машинописному тексту , и, если я что-то упустил, я не понимаю, почему создаваемый мною литерал объекта нельзя назначить типу T. Я знаю, что могу набирать тип на моем литерале объекта,что бы решить это, но я не понимаю, зачем мне это нужно.Typescript содержит всю информацию для поиска соответствия типов.
По какой причине он не распознается в этом случае?