仅使用特定于类的属性使用partials初始化TypeScript对象
考虑以下示例:仅使用特定于类的属性使用partials初始化TypeScript对象,typescript,typescript-types,Typescript,Typescript Types,考虑以下示例: const assign=(…参数:T[]):T=> 参数减少((结果,当前)=> (对象。键(当前)为K[])。减少((目标,键)=>{ 目标[键]=当前[键]; 回报目标; },结果) ,args[0]); 阶级基础{ str1:string=''; str2:string=''; 建造商(数据:部分){ 分配(此,数据); } } 类派生的扩展基{ str3:string=''; 建造商(数据:部分){ 超级(数据); 分配(此,数据); } } const derived
const assign=(…参数:T[]):T=>
参数减少((结果,当前)=>
(对象。键(当前)为K[])。减少((目标,键)=>{
目标[键]=当前[键];
回报目标;
},结果)
,args[0]);
阶级基础{
str1:string='';
str2:string='';
建造商(数据:部分){
分配(此,数据);
}
}
类派生的扩展基{
str3:string='';
建造商(数据:部分){
超级(数据);
分配(此,数据);
}
}
const derivedObj=新派生({str1:'text',str3:'new prop'})
const baseObject=新基(derivedObj);
console.log(baseObject);
//产出:
//数据{“str1”:“text”,“str2”:“str3”:“new prop”}
基类包含的属性少于派生类。基类构造函数接受一个Partial
,它也与Partial
类型兼容。这会导致在传递类型为Partial
的对象时,将无关属性指定给基类对象
是否有方法仅使用基类对象的类特定属性(str
和str2
而不是str3
)初始化基类对象?
PS:在GitHub和这里有很多类似的讨论。到目前为止,我还没有找到任何解决这个问题的方法。这个方法有效:
const assign = <T, K extends keyof T>(...args: T[]): T =>
args.reduce((result, current) =>
(Object.keys(args[0]) as K[]).reduce((target, key) => {
if (current[key] !== undefined) target[key] = current[key];
return target;
}, result)
, args[0]);
const assign=(…参数:T[]):T=>
参数减少((结果,当前)=>
(Object.keys(args[0])作为K[])。reduce((target,key)=>{
如果(当前[键]!==未定义)目标[键]=当前[键];
回报目标;
},结果)
,args[0]);
看到这个谢谢你,看着你的代码,我意识到我离你太近了。:)