小编Ros*_*mon的帖子

更简单的方法来强制执行类型化的不可变数据结构?

使用vanilla JS对象和流强制执行数据结构很容易:

type ExampleObjType = {
  key1: number,
  key2: string
};

const obj: ExampleObjType = {
  key1: 123,
  key2: '123'
};
Run Code Online (Sandbox Code Playgroud)

看起来这需要一个不必要的大量样板来在Immutable中强制执行类似的结构:

type TestSpec = {
  key1: number,
  key2: string,
};

const TestRecord = Record({
  key1: 0,
  key2: '',
});

const record: TestSpec & Record<TestSpec> = new TestRecord({
  key1: 123,
  key2: '123',
});
Run Code Online (Sandbox Code Playgroud)

此外,上述结构有一些主要缺点:

  • 强制默认值
  • 初始化时无法强制执行无效密钥,仅在访问时执行

理想情况下我可以使用Immutable.Map,像这样:

type TestSpec = Map<{key1: number, key2: number}>;

const testMap: TestSpec = Map({
  key1: 123,
  key2: '123',
});
Run Code Online (Sandbox Code Playgroud)

但是,当前实现仅允许键入键和值类型.我可以使用像hokey这样的东西约束键类型type Key = …

flowtype immutable.js

4
推荐指数
1
解决办法
197
查看次数

标签 统计

flowtype ×1

immutable.js ×1