首页 > 解决方案 > 动态编程中的打字稿打字?

问题描述

我试图在打字稿中获取类型以进行动态编程。我在线上遇到错误

        const { oldListIndex, getNewFunc } = getFunc(newObjItem, oldObj);

错误是

无法调用其类型缺少调用签名的表达式。输入'((项目:{},列表:T)=> { oldListIndex:数字;getNewFunc:{};})| { [K in { [K in keyof T]: T[K] 扩展对象?K:从不;}[keyof T]]: funcIterator; }' 没有兼容的调用签名。

和线

    oldObj = newObj

错误是

“部分”类型不能分配给“T”类型。

type funcIterator<T> = T extends Array<infer U> ?
    (item: U, list: T) => funcIterator<U> extends never ?
        { oldListIndex: number, } : { oldListIndex: number, getNewFunc: funcIterator<U> }
    : T extends object ? { [K in objectKeys<T>]: funcIterator<T[K]> } : never;

type objectKeys<T extends object> = {
    [K in keyof T]: T[K] extends object ? K : never
}[keyof T];

function updateOldObj<T>(oldObj: T, newObj: Partial<T>, getFunc: funcIterator<T>) {
    if (Array.isArray(newObj) && Array.isArray(oldObj)) {
        newObj.forEach(newObjItem => {

            const { oldListIndex, getNewFunc } = getFunc(newObjItem, oldObj);
            oldObj[oldListIndex] = updateOldObj(oldObj[oldListIndex], newObjItem, getNewFunc)
        });
        return oldObj;
    } else if (typeof newObj === 'object' && typeof oldObj === 'object') {
        Object.keys(newObj).forEach((newObjKey) => {

            oldObj[newObjKey] = updateOldObj(oldObj[newObjKey],
                newObj[newObjKey], (getFunc) ? getFunc[newObjKey] : undefined);
        });
        return oldObj;
    } else {
        oldObj = newObj
        return oldObj;
    }
}

任何有关相同的帮助将不胜感激。

标签: typescriptdynamic-programmingtypescript-typings

解决方案


推荐阅读