我正在使用以下代码来获取唯一编号:
let uniques = [ ...new Set([1, 2, 3, 1, 1]) ]; // [1, 2, 3]
但是,打字稿报告以下错误:Type'Set '不是数组类型。 我不是忍者打字稿,有人可以告诉我这是怎么回事吗?
我正在使用以下代码来获取唯一编号:
let uniques = [ ...new Set([1, 2, 3, 1, 1]) ]; // [1, 2, 3]
但是,打字稿报告以下错误:Type'Set '不是数组类型。 我不是忍者打字稿,有人可以告诉我这是怎么回事吗?
Answers:
这是缺少的功能。TypeScript目前仅支持数组上的可迭代对象。
更新:使用Typescript 2.3,您现在可以将其添加"downlevelIteration": true
到tsconfig中,并且在定位ES5时可以使用。
不利的downlevelIteration
一面是,TS在转桩时必须注入很多样板。问题中的单行转换为添加了21行样板的代码:(自打字稿2.6.1起)
每个使用下层迭代的文件都会将此样板注入一次,并且可以使用该"importHelpers"
选项通过tsconfig减少该样板。(有关下级迭代,请参见此博客文章,以及importHelpers
)
另外,如果对您而言ES5支持无关紧要,则始终始终可以首先定位“ es6”,在这种情况下,原始代码可以使用而无需“ downlevelIteration”标志。
原始答案:
这似乎是打字稿ES6的翻译怪癖。该...
经营者应在任何有一个iterator属性(由工作访问的obj[Symbol.iterator]
),并设置有属性。
要解决此问题,可以Array.from
先将集合转换为数组:...Array.from(new Set([1, 2, 3, 1, 1]))
。
Array.from
。大多数其他人似乎只是放弃了这一点。感谢您提供真正的解决方案!
es5
目标提供支持(请参阅github.com/Microsoft/TypeScript/issues/4031)。Array.from
如果您在tsconfig中的列表中es2015
具有()或更高(es2017
,esnext
lib
您也可以使用Array.from方法将Set转换为Array
let uniques = Array.from(new Set([1, 2, 3, 1, 1])) ;
console.log(uniques);
Array.from()
,则不再需要传播运算符。它只会增加开销。let uniques = Array.from(new Set([1, 2, 3, 1, 1]));
要使其工作,您需要在tsconfig.json的editorOptions中使用“ target”:“ ES6”(或更高版本)或“ downlevelIteration”:true。这解决了我的问题,对我或我都有益。希望它对您也有帮助。