小编ian*_*cio的帖子

Flowtype - 字符串与字符串枚举不兼容

我有一个来自select输入的值,并且是string类型,但是我想将它传递给一个函数(updateLanguage),该函数接收带有类型别名(Language)的字符串枚举作为参数.

我面临的问题是Flow只允许我调用updateLanguage如果我明确地将我的字符串值与枚举字符串进行比较,并且我想使用像array.includes这样的数组函数.

这是我的问题的代码简化:

// @flow

type SelectOption = {
    value: string
};
const selectedOption: SelectOption = {value: 'en'};

type Language = 'en' | 'pt' | 'es';
const availableLanguages: Language[] = ['en', 'pt'];

function updateLanguage(lang: Language) {
    // do nothing
}

// OK
if(selectedOption.value === 'en' || selectedOption.value === 'pt') {
  updateLanguage(selectedOption.value);
}

// FLOWTYPE ERRORS
if(availableLanguages.includes(selectedOption.value)) {
  updateLanguage(selectedOption.value);
}
Run Code Online (Sandbox Code Playgroud)

运行流程v0.30.0给出以下输出:

example.js:21
 21: if(availableLanguages.includes(selectedOption.value)) {
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ call of method `includes`
 21: if(availableLanguages.includes(selectedOption.value)) {
                                    ^^^^^^^^^^^^^^^^^^^^ string. …
Run Code Online (Sandbox Code Playgroud)

javascript string enums typechecking flowtype

11
推荐指数
1
解决办法
3435
查看次数

标签 统计

enums ×1

flowtype ×1

javascript ×1

string ×1

typechecking ×1