代码之家  ›  专栏  ›  技术社区  ›  Alex Craft

使用Sweet.JS卫生宏(如扩展方法)以安全的方式扩展TypeScript/JavaScript本机对象

  •  0
  • Alex Craft  · 技术社区  · 6 年前

    这个 https://www.sweetjs.org 库允许转换JavaScript代码。我想知道是否可以使用它以安全的方式扩展原生对象,如数组、对象、字符串等,而不将任何东西附加到它们的原型上。

    似乎sweet.js应该能够转换这个js代码

    { a: 1 }.isEmpty()
    

    进入

    Extensions.isEmpty({ a: 1 })
    

    实施可能是

    Extensions.isEmpty = (o) => {
      if ('isEmpty' in o) return o.isEmpty()
      for (const k in o) if (o.hasOwnProperty(k)) return false
      return true
    }
    

    但我不确定 我应该用Sweet.JS编写什么样的代码来实现这个功能 ?

    附笔。

    而对于TypeScript,它应该工作得更好。我们可以诱使TypeScript认为我们的对象是通过在下面给出错误声明来扩展的,然后在TypeScript编译之后应用Sweet.JS编译。

    declare global {
      interface Object {
        isEmpty(): boolean
      }
    }
    

    所以我们得到了所有正确的扩展类型,我们的原生对象将保持完全干净。

    0 回复  |  直到 6 年前