Typescript 什么';什么是创建模拟商店的最佳方式?

Typescript 什么';什么是创建模拟商店的最佳方式?,typescript,Typescript,在我们的测试中,我们的测试代码充满了这样的代码 const mockState = { client: { users: { results: { something: -91893.21, }, }, }, }; 显然,mockState是非类型化的。我无法将其键入为RootState,因为该接口具有此测试不需要的大量属性 我研究了Partial和DeepParti

在我们的测试中,我们的测试代码充满了这样的代码

const mockState = {
      client: {
        users: {
          results: {
            something: -91893.21,
          },
        },
      },
    };
显然,mockState是非类型化的。我无法将其键入为RootState,因为该接口具有此测试不需要的大量属性


我研究了Partial和DeepPartial,但它们没有真正的帮助,因为任何json都会实现任何DeepPartial,因为每个属性都是可选的。是否有一种方法可以键入json对象,使其所有属性都与特定类型匹配,但并非所有属性都是必需的。令人困惑的问题。我想向IWhatever键入mockState,这样它就不会编译,除非IWhatever有一个名为client的属性,该属性有一个名为users等的属性。

如果您在执行赋值的同时执行赋值,变量定义将生效,并将阻止您添加任何其他属性

例子
类型根状态={
客户:{
a:{
某物:号码
},
b:{
某物:号码
}
},
服务器:{
a:{
某物:号码
},
b:{
某物:号码
}
}
}
//参考深度部分
类型DeepPartial={
[P在keyof T]?:T[P]扩展数组
?阵列
:T[P]扩展只读数组
?只读阵列
:深偏
};
//好的
常量mockState:DeepPartial={
客户:{
a:{
某物:123
}
}
}
//不好
常量mockStateBad:DeepPartial={
客户:{
a:{
有些事情:123//错误
}
}
}

您想知道如何提取较大类型的特定属性类型吗?类似于拾取?
type RootState = {
  client: {
    a: {
      something: number
    },
    b: {
      something: number
    }
  },
  server: {
    a: {
      something: number
    },
    b: {
      something: number
    }
  }
}

// Reference DeepPartial
type DeepPartial<T> = {
  [P in keyof T]?: T[P] extends Array<infer U>
    ? Array<DeepPartial<U>>
    : T[P] extends ReadonlyArray<infer U>
      ? ReadonlyArray<DeepPartial<U>>
      : DeepPartial<T[P]>
};


// Okay 
const mockState: DeepPartial<RootState> = {
  client: {
    a: {
      something: 123
    }
  }
}

// Not Okay 
const mockStateBad: DeepPartial<RootState> = {
  client: {
    a: {
      somethings: 123 // ERROR 
    }
  }
}