【问题标题】:How can I get TypeScript to build iterables in ES6 to ES5?如何让 TypeScript 在 ES6 到 ES5 中构建可迭代对象?
【发布时间】:2016-07-25 18:48:58
【问题描述】:

我正在尝试使用 TypeScript 在 Angular 2 中创建一个独特的用户对象数组。我正在使用简短而优雅的 ES6 方式来创建一个独特的数组:

  this.users = Array.from(new Set(this.users))

当我将 TypeScript 构建到 ES5 时出现此错误:

“Set”类型的参数不能分配给“IterableShim”类型的参数。 类型“Set”中缺少属性“es6-shim 迭代器”。

我尝试设置 this.users : IterableShim<T> 但 IterableShim 不是可接受的类型,如字符串。文档说 String、Array、TypedArray、Map 和 Set 都是内置的可迭代对象,因为它们的原型对象都有 Symbol.iterator 方法。 (来源:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators)有没有办法让 TypeScript 编译 ES6,它识别为 ES5 的可迭代对象而不会出错?

【问题讨论】:

  • ES5 没有 Sets 或 Array.from,甚至没有类似的可迭代对象?
  • 不,它们是 ES6 中的新功能。来源:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
  • 这是一个想法this.users = this.users.slice()
  • 使用 slice 并不能解决如何让 TypeScript 在 ES5 中构建可迭代对象。

标签: javascript typescript set ecmascript-6


【解决方案1】:

lib 选项用作:

"lib": [
  "dom","es6"
]

以下工作正常:

let users = []
users = Array.from(new Set(users))

更多

https://basarat.gitbooks.io/typescript/content/docs/types/lib.d.ts.html#lib-option

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-14
    • 2018-08-31
    • 2020-04-14
    • 1970-01-01
    • 1970-01-01
    • 2016-08-09
    • 2020-11-01
    • 2017-05-02
    相关资源
    最近更新 更多