【问题标题】:Flow lose literal type in intersection type流在交集类型中丢失文字类型
【发布时间】:2017-05-30 18:02:00
【问题描述】:

我正在制作我的第一个流程项目,但我遇到了“奇怪”的行为。

这是重现我的问题的极简代码

type PropBase = { name: string }

export type PropTyped =
  | { type: 'string', value: string }
  | { type: 'number', value: number }

export type Prop = PropBase & PropTyped

const p1: Prop = { name: 'prop1', type: 'string', value: 'coucou' };
// Error
const p2: Prop = p1;

错误是:

10: const p2: Prop = p1;
                     ^ intersection type. This type is incompatible with
7: export type Prop = PropBase & PropTyped
                                 ^ union: object type(s)

(流 v0.47.0,try flow

Flow 似乎“丢失”了字面量类型...但是为什么呢?我是不是做错了什么?

【问题讨论】:

  • 我提交了一个带有较小示例的编辑。这绝对是一个错误。随时在github.com/facebook/flow 上打开一个问题
  • @NatMote 我已经打开了一个Issue,但我担心它会在大量其他问题中丢失:-)

标签: javascript flowtype


【解决方案1】:

答案是 Flow 尚不支持此功能。

一种解决方案是在每个类型声明中使用交集:

export type PropBase = { name: string }

export type PropTyped =
  | { type: 'string', value: string & PropBase }
  | { type: 'number', value: number & PropBase}

Here is a dedicated issue,不知道有没有短期计划处理这个案子。

【讨论】:

    猜你喜欢
    • 2019-05-26
    • 1970-01-01
    • 2020-02-05
    • 2019-08-24
    • 2021-07-13
    • 1970-01-01
    • 2021-09-16
    • 2016-07-13
    • 1970-01-01
    相关资源
    最近更新 更多