繁体   English   中英

键入模拟商店的最佳方式是什么?

[英]what's the best way to type a mock store?

我们的测试代码在我们的测试中充斥着这样的代码......

const mockState = {
      client: {
        users: {
          results: {
            something: -91893.21,
          },
        },
      },
    };

显然 mockState 是无类型的。 我不能将其键入为 RootState,因为该接口具有该测试不需要的大量属性。

我查看了 Partial 和 DeepPartial 但它们并没有真正帮助,因为任何 json 都会实现任何 DeepPartial,因为每个属性都是可选的。 有没有办法输入 json object 以便它的所有属性都匹配特定类型,但并非所有属性都是必需的。 令人困惑的问题。 我想将 mockState 输入到 IWhatever 以便它不会编译,除非 IWhatever 有一个名为 client 的属性,它有一个名为 users 等的属性。

如果您在执行变量定义object的同时进行赋值,那么新鲜度就会启动,并且会阻止您添加任何其他属性。

例子

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM