【问题标题】:Idiomatic way to handle tagged union type using a tag lookup structure使用标记查找结构处理标记联合类型的惯用方法
【发布时间】:2019-08-22 21:01:20
【问题描述】:

这很难描述,但请参阅我的flow.org/try snippet 以获取最少的重现代码示例。

我的 sn-p 被剥离的实际代码有更多的类型和操作,但核心思想在底部 - 记住记录和类型操作查找之间的关联。 JavaScript 是健全的并且在理论上是可证明的,但 Flow 似乎没有能力处理这个操作。

对于如何处理标记联合类型的问题,我遇到了几个变体,我的目标是按类型组织 display 和其他操作,以便更轻松地维护不同的记录。过去的方法涉及使用 switch(或 if/else)语句对 type 字段执行类型细化,但随着类型和操作的数量增加(我现在有超过 30 种类型和超过 6 种不同的操作),这些方法变得笨拙.

我希望 Flow 的分支分析和类型细化功能可以处理此代码,因为 MyRecord 的子类型数量有限(我们不是在这里解决停止问题,只是在实践中证明了可靠性)。

我打算在 GitHub 上发帖,因为这可能是 Flow 开发问题,但我想从 StackOverflow 开始,因为也许有更好的方法来构建此代码。

【问题讨论】:

    标签: javascript flow-typed


    【解决方案1】:
    declare var arr: Array<string | number>;
    
    (arr[0]: string|number); // string or number
    
    // But:
    declare var tupleArr: [string | number];
    
    (tupleArr[0]: string); // string only
    

    Flow.js Tuple Types

    Try flow.js

    【讨论】:

    • 不幸的是(也许这个例子没有说明这一点),这确实是一个泛型类型的数组——它们可以是任何东西,而且可能不止两个。为了清楚起见,我将更新示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-16
    • 2013-03-11
    • 2019-06-14
    相关资源
    最近更新 更多