如何在类型定义文件中使用自定义es6符号,或:如何为ES6 Set定义过滤方法

时间:2018-02-28 08:08:39

标签: typescript symbols typescript-typings type-definition

我想使用符号向es6 Set添加filter方法。该方法应该类似于Array.prototype.filter。我不知道如何编写类型定义文件。这在.d.ts文件中不起作用:

const filterSymbol = Symbol()

interface Set {
  [filterSymbol]: any
}

我得到的错误是无法将filterSymbol分配给符号。

Error:(1, 19) TS1254: A 'const' initializer in an ambient context must be a string or numeric literal.

我想创建此类型,以便将Set.prototype [filterSymbol]作为本地标准库的一部分。所以它就像是对lib.es6.d.ts的补充。

当然,该方法的实施将是:

Object.defineProperties(Set.prototype, {
  [ filterSymbol ]: {
    value: function <T> (this: Set<T>, f: (element: T) => boolean): Set<T> {
      return new Set([ ...this ].filter(f))
    }
  }
})

1 个答案:

答案 0 :(得分:0)

我必须使用declare和Typescript 2.7功能unique symbol

declare const filterSymbol = unique symbol

interface Set {
  [filterSymbol]: any
}