【问题标题】:Is it possible to annotate Arrays with custom properties?是否可以使用自定义属性注释数组?
【发布时间】:2016-12-17 07:03:49
【问题描述】:

我正在尝试将类型注释添加到现有代码中,并且我有一个 Array 实例,它可以兼作具有自定义属性的对象。像这样:

const foo = [];
foo[0] = 13;
foo.push(42);

foo.superLevel = 'extreme'; // Flow complains about this

我想我可能会声明一个名为 SuperArray 的新类型,类似于以下内容:

type SuperArray = Array<number> & {
  superLevel: string,
}
const foo: SuperArray = [];
// ...

(View on flowtype.org/try)

但这也不起作用。我已经 Goggled 并浏览了文档,但没有找到关于

的答案

A) 这完全支持吗?
B) 如果是,如何注释。

【问题讨论】:

    标签: javascript flowtype


    【解决方案1】:

    有人发布了一个有用且内容丰富的答案(我投了赞成票),但它似乎不见了——也许是因为我指出它并没有完全回答最初的问题,尽管它提供了一个很好的解决方法。

    无论如何,他们建议重写代码以将 SuperArray 定义为扩展 Array 并添加 props 的类...

    class SuperArray extends Array<number> {
      superLevel: string
    }
    
    const foo = new SuperArray();
    

    (Explore on Flowtype.org/try)

    这是一个不错的、干净的方法,但我主要想知道是否可以对原始模式进行注释——比如在一个仅限于编写独立声明来描述第 3 方模块的情况下。

    【讨论】:

    • 答案来自我,我删除它正是因为你提到的原因。我想如果它不合适,那么我最好删除答案,以增加对 Flow 有更深入了解的人发现问题的机会。
    • 啊,我明白了。但是,记录替代方法也很有用。
    猜你喜欢
    • 2019-02-08
    • 1970-01-01
    • 2018-12-11
    • 1970-01-01
    • 2011-06-08
    • 1970-01-01
    • 1970-01-01
    • 2016-12-09
    • 2017-07-07
    相关资源
    最近更新 更多