Typescript - Generic Constraints - не принимает объектный литерал соответствующего типа - PullRequest
0 голосов
/ 20 февраля 2019

Использование машинописного текста 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 содержит всю информацию для поиска соответствия типов.

По какой причине он не распознается в этом случае?

...