使用object的值作为类型 - $ Values - 类似于$ Keys

时间:2017-08-26 05:30:37

标签: flowtype

从流程文档中我们得到了:

// @flow
const countries = {
  US: "United States",
  IT: "Italy",
  FR: "France"
};

type Country = $Keys<typeof countries>;

const italy: Country = 'IT';
const nope: Country = 'nope'; // 'nope' is not a Country

但我想做

type CountryValue = $Values<typeof countries>
const italy: CountryValue = 'Italy'; // yes

这可能吗?

1 个答案:

答案 0 :(得分:3)

您可以使用$Values进行排序,但您还需要执行更多操作,因为目前countries中的值仅被检测为任何string。如果告诉flow只允许某些值,那么它可以工作:

type FullNames = "United States" | "Italy";

const countries: {[key: string]: FullNames} = {
  US: "United States",
  IT: "Italy"
};


const nope: $Values(typeof countries) = 'nope'; // 'nope' is not in the value type

我猜这不是完全你想要什么,因为它需要明确添加类型,但它是可行的。