Typescript 在跳过字段时构造对象

Typescript 在跳过字段时构造对象,typescript,Typescript,新的打字脚本。我试图用另一个任意形状的对象构造一个对象: class Thing { a?: string; b?: string; } const input = {a: 'a', b: 'b', c: 'c'} const builtInput: Thing = { ...input } console.log(builtInput) 我期待着 {a: "a", b: "b"} 但是 {a: &quo

新的打字脚本。我试图用另一个任意形状的对象构造一个对象:

  class Thing {
    a?: string;
    b?: string;
  }
  const input = {a: 'a', b: 'b', c: 'c'}
  const builtInput: Thing = {
    ...input
  }
  console.log(builtInput)
我期待着

{a: "a", b: "b"}
但是

{a: "a", b: "b", c: "c"}

我也尝试过将
东西作为类型和接口。什么都不管用。我是否期望太多的魔法,需要编写自定义构造函数?有没有一种typescript方法可以做到这一点?

您应该编写一个函数,它将创建一个具有所需键的对象。我认为,类似这样的东西会很有用:

//初始类型
类型输入={
a:弦;
b:弦;
c:字符串;
}
//结果类型
类型Build=Pick;
常量getFilteredInput=(对象:T,必需值:数组)=>{
返回所需值减少((acc,当前)=>{
if(obj中的电流){
acc[当前]=obj[当前];
}
返回acc;
},{}作为选择);
//Pick从T中描述仅具有K个关键点的对象
};
常量输入:输入={
a:‘a’,
b:‘b’,
c:‘c’,
};
const build:build=getFilterDinpot(输入,['a',b']);
console.log('build',build);

Imo这不应该编译,但是会编译,而且由于
Thing
的两个属性都被标记为可选,所以在
input
中放入任何东西都会编译。但是为了给答案一个提示,typescript除了类型检查之外没有任何作用,因此您必须通过handWell分配值,我提供的示例是一个简化,
input
可能有几十个字段,并且字段每次都可能不同。我只关心选择与我类型的字段匹配的字段子集。听起来你需要一些函数来完成这项工作