从对象类型属性创建别名类型

时间:2017-02-14 17:30:03

标签: javascript flowtype

我遇到Flow的以下问题:

我有一个对象的类型别名A

type A = {
  B: {
    C: string
  }
}

我想创建另一个类型别名B p.e.,它在B中具有A属性的签名。

我尝试使用type B = A.B;,但它会抛出以下错误:

[flow] [flow] B (Property cannot be accessed on type `A`)

我找到了一个解决方案,但它有点棘手而且不优雅:

type A = {
  B: {
    C: string
  }
}

//FAKE constant of type A
const fakeA : A = (null : any);

type B = typeof fakeA.B;

还有其他解决方案吗?

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

您可以使用$PropertyType帮助

type A = {
  B: {
    C: string
  }
}

type B = $PropertyType<A, 'B'>

有关完整文档,请参阅https://flow.org/en/docs/types/utilities/#toc-propertytype

答案 1 :(得分:0)

你能这样做吗?

type B = {
  C: string
}
type A = {
  B: B
}

它并不完全符合您的要求,但确实可以避免重复。我不相信有办法完全按照你的要求去做。