如何为不可变js类型写一个流类型定义
How to write a Flow Type definition for ImmutableJS Types?
我看到ImmutableJS现在有流类型注释,但我如何定义类型?例如:
const state : ??? = Immutable.fromJS({ name: 'chet', tags: ['something']})
我可以从普通JS中定义类型,但我怎么说这是一个不可变的。有特定键的地图?
现在的问题是不可变流类型只支持每个键和值组合的一个类型定义。
所以不可变的。Maps接受Map<keyType, valueType>
和不可变的。List接受List<valueType>
Immutable.fromJS ({name:"切特",标签:['东西']})
等价于Map({name: 'chet', tags: List(['something])}
所以,你的类型定义应该是 Map<(string) | ('name', 'tags'), string | List<string>>
使用Record代替Map(或fromJS)。这并不是对代码的最佳补充,特别是如果您的状态嵌套了Record
,但是类型检查支持非常好。
// @flow
import { Record, List } from 'immutable';
import type { RecordFactory, RecordOf } from 'immutable';
type StateProps = {
name: string,
tags: List<string>,
}
type State = RecordOf<StateProps>;
const makeState: RecordFactory<StateProps> = Record({
name: '',
tags: List(),
});
const state: State = makeState({
name: 'chet',
tags: List(['something']),
});
// Or, to to create an instance of the default
// const _state: State = makeState();
我将这种类型写成
const state: Map<string, any>
这表示state将是Map类型,Map将具有字符串键和(name, tags),值将是any。
另外,请注意,您必须执行
import type { Map } from 'immutable';
否则它会认为它是原生类型Map你会看到错误,比如Map没有get或getIn方法。
相关文章:
- Webpack/Rect:遵循egghead.io教程,但出现错误:您可能需要一个合适的加载程序来处理此文件类型
- 将添加一个相同类型的事件附加或覆盖以前添加的具有相同名称的事件
- dataTables-如何自定义分页类型以显示最后一个页码后面的省略号,
- 如何将输入类型值或id从一个jsp传递到另一个jsp页面
- 如何将键入的文本从一个输入类型的文本复制到另一个
- 在scala或scalajs Diode中,现有类型中的任何一种都符合“;更新一个没有'还不存在”;
- 传递来自<输入类型=“;文件“;id=“;文件“/>尽管还有一个按钮点击
- 我如何才能拥有一个类型为Java.util.Arraylist的javascript对象
- 我收到一个类型错误,其中包含-"$不是函数“;使用noConflict时
- 为什么我会得到一个“;未捕获类型错误”;当我介绍D3.transition()时
- 使用 javascript 为 CSS 创建一个新的单位类型
- 未捕获的类型错误: $(..).不是一个函数..升级到 PHP7.0 后标记
- 反应.js:未捕获类型错误:未定义不是一个函数
- 类型错误: $(..).查找(..).on 不是一个函数
- JavaScript 错误:未捕获类型错误:foo 不是一个函数
- 按类划分的元素数组 - 类型错误:$.id 不是一个函数
- 类型错误:数字不是一个函数
- 引导选项卡 - 类型错误 .tab 不是一个函数
- 蓝鸟与猫鼬,类型错误:.create(..).然后(..).Nodeify不是一个函数
- 内容可编辑-根据类型从一个跨度到另一个跨度克隆文本