我想创建一个表示 2 个字符的 ISO 国家/地区代码的类型。有没有一种简单的方法来为这些(或任何其他固定长度的项目)创建类型定义?
当然,一种方法是枚举所有可能的列表
type CountryCode = "AX" | "AL" | "DZ" | ...
但我喜欢更简单的东西,它只强制执行 2 个字符的字符串。
我是否需要使用 dynamic type tests ?
最佳答案
不,Flow 没有这样的功能。它实际上没有任何依赖类型的特性,其他可能包含单个值的类型。
您可以使用类似 if (countryCode.length === 2) { ... }
的测试就像您通常在 JS 中所做的那样,但 Flow 不会细化 countryCode
的类型内if
块,因为没有 Flow 类型来表示两个字符的字符串。
相比之下,实际动态类型测试如 if (countryCode !== null)
流会知道countryCode
在 if 块内不为空,并且可以使用该知识进行类型检查。
请注意,从技术上讲,您可以生成包含从 A 到 Z 的 26*26=676 个大写字符字符串的类型:“AA”、“AB”、...、“ZY”、“ZZ”,但这并不是对你的实现。
关于flowtype - 如何在流中创建定长类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39236207/