我使用的是带有immutable@4.0.0-rc.12
的Typescript版本3.8.3
。
当我使用二维数组创建OrderedMap
来实例化它时,我从Typescript中得到了错误。
let v: OrderedMap<number, string> = OrderedMap([ [ 3, '2' ] ])
Codesandbox.io 示例
似乎库的定义文件可能是错误的?(immutable-nonambient.d.ts(1421, 39)
(。这就是它给我的错误:
No overload matches this call.
Overload 1 of 4, '(collection: Iterable<[string | number, string | number]>): OrderedMap<string | number, string | number>', gave the following error.
Argument of type '(string | number)[][]' is not assignable to parameter of type 'Iterable<[string | number, string | number]>'.
The types returned by '[Symbol.iterator]().next(...)' are incompatible between these types.
Type 'IteratorResult<(string | number)[], any>' is not assignable to type 'IteratorResult<[string | number, string | number], any>'.
Type 'IteratorYieldResult<(string | number)[]>' is not assignable to type 'IteratorResult<[string | number, string | number], any>'.
Type 'IteratorYieldResult<(string | number)[]>' is not assignable to type 'IteratorYieldResult<[string | number, string | number]>'.
Type '(string | number)[]' is missing the following properties from type '[string | number, string | number]': 0, 1
Overload 2 of 4, '(obj: { [key: string]: string; }): OrderedMap<string, string>', gave the following error.
Type '(string | number)[]' is not assignable to type 'string'.ts(2769)
immutable-nonambient.d.ts(1421, 39): The expected type comes from this index signature.
我对Map
也有同样的看法。如果我创建空的Map
或OrderedMap
并将其分配给变量,我可以在没有错误的情况下对数据执行操作,因此它在以这种方式初始化时会遇到问题。
使用此签名进行实例化:OrderedMap({ 3: '2' })
在没有编译错误的情况下工作。但很明显,我不能使用它,因为我希望我的密钥是数字,而使用数组表示法是实现它的唯一方法
首先,@types/immutable
不再支持
此包已被弃用
作者信息:
这是Facebook的Immutable的存根类型定义(https://github.com/facebook/immutable-js)。Facebook的Immutable提供了自己的类型定义,所以你不需要安装@types/Immutable!
删除它之后,您应该会在编辑器中得到不错的类型提示。
工作示例:https://stackblitz.com/edit/typescript-vwetmv?file=index.ts
更新
在编译器选项中添加"target": "es2015"
将删除该错误。
请参阅文档:将TypeScript与Immutable.js v4 一起使用
Immutable.js类型定义包含ES2015。虽然Immutable.js本身支持遗留浏览器和环境,但其类型定义需要TypeScript的2015 lib。在
tsconfig.json
中包含"target": "es2015"
或"lib": "es2015"
,或将--target es2015
或--lib es2015
提供给tsc
命令。