首页 > 解决方案 > 使用 JavaScript Flow,如何将允许的值限制为类型的键?

问题描述

应该代替什么,???以便以下内容起作用:

type Product = {
    id: number,
    name: string;
}

const foo: ??? = 'id' // works
const bar: ??? = 'name' // works
const baz: ??? = 'someField' // FAIL!

标签: javascriptflowtype

解决方案


您可以使用从类型中提取所有键并生成它们的联合的$Keys实用程序类型。

type Product = {
    id: number,
    name: string;
}

const foo: $Keys<Product> = 'id' // works
const bar: $Keys<Product> = 'name' // works
const baz: $Keys<Product> = 'someField' // FAIL!

看一个活生生的例子

实际上$Keys<Product>与 相同,"id" | "name"但它是根据 中存在的属性动态计算的Product。如果你想重用它,你也可以提取类型:

type ValidKey = $Keys<Product>

const foo: ValidKey = "id"

推荐阅读