gpt4 book ai didi

javascript - 从流中的对象值定义联合类型

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:30:01 25 4
gpt4 key购买 nike

我有一个这样的枚举:

const Filter = {
ALL: 'ALL',
COMPLETED: 'COMPLETED',
UNCOMPLETED: 'UNCOMPLETED'
};

我想做的是像这样声明一个联合类型:

type FilterType = Filter.ALL | Filter.COMPLETED | Filter.UNCOMPLETED

然而,这失败了,但我不确定为什么。根据Flow docs :

When you create an object with its properties, you create a sealed object type in Flow. These sealed objects will know all of the properties you declared them with and the types of their values.

因此,如果我没看错的话,Flow 应该能够从这些值中创建一个类型。相反,它失败了:

不能使用字符串作为类型,因为字符串是一个值。要获取值的类型,请使用 typeof。

这是一个指向 Flow Try 的链接有一个可能的解决方案(我不满意)和其他未成功的方法。

最佳答案

有一个更简单的解决方案。您可以使用 $Values获取值类型联合的实用程序。为了使流将类型解析为文字类型而不仅仅是 string 对象应该被卡住:

const FilterA = Object.freeze({
ALL: 'ALL',
COMPLETED: 'COMPLETED',
UNCOMPLETED: 'UNCOMPLETED'
});

type FilterTypeA = $Values<typeof FilterA>;


let a: FilterTypeA = FilterA.ALL; //OK
a = 'COMPLETED'; //OK

a = 'foo'; //$Expect error: string is incompatible with enum FilterTypeA

Try

此模式自 0.60.0 version 起有效

关于javascript - 从流中的对象值定义联合类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51163305/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com