Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
仅使用特定于类的属性使用partials初始化TypeScript对象_Typescript_Typescript Types - Fatal编程技术网

仅使用特定于类的属性使用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]);

看到这个

谢谢你,看着你的代码,我意识到我离你太近了。:)