Typescript-通用约束-不接受匹配类型的对象文字

时间:2019-02-20 11:14:49

标签: angular typescript generic-constraints

在angular 7框架中使用打字稿3。

我正尝试使用本地对象的Id属性作为包装对象的键,从而为Firebase准备本地Store数组元素,反之亦然,当从Firestore获取内容时,反之亦然。

我已经设置了一个界面,该界面应该与我的任何本地Store元素一起使用,因为它们都具有id属性:

interface localItem {id:string, [x:string]:any}

和等效的firebase,因为它们都使用id作为键

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
        }

我已经读过typescript docs,除非我缺少某些内容,否则我不明白为什么我创建的对象文字不能分配给类型T。我知道我可以在对象文字上键入大小写,这会解决它,但我不明白为什么需要它。 Typescript具有查找匹配类型的所有信息。

在这种情况下无法识别它的原因是什么?

0 个答案:

没有答案