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
}
}
}