typescript - 动态编程中的打字稿打字?
问题描述
我试图在打字稿中获取类型以进行动态编程。我在线上遇到错误
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;
}
}
任何有关相同的帮助将不胜感激。
解决方案
推荐阅读
- javascript - 如何使用 react-alert 在组件中显示消息?
- java - 错误:在项目':app'上找不到参数[目录'libs']的方法implimentation()
- r - 将 csv 导入 R 中,缺失值为“N
- angular - 如何显示单词列表中的建议单词?
- angular - 使用 slectedData undefined 以角度构建打印 div 按钮
- sql - 如何提取表中添加的最新记录?
- javascript - 一个不区分大小写或仅在数组中小写的基本 Vue JS 搜索过滤器?
- macos - 自定义字段编辑器的视觉故障
- azure-ad-graph-api - 图形 API 响应:在类型“Microsoft.OutlookServices.Contact”上找不到名为“telephoneNumber”的属性
- javascript - 使用 react-router 配置动态 url 参数时遇到困难