Постоянные значения как элемент массива дают ошибку - PullRequest
0 голосов
/ 20 ноября 2018

Я новичок в Typescript.У меня есть эти enum и постоянные переменные:

enum VALUE_MAP = { value1 = 'value1', value2 = 'value2', value3 = 'value3' }
const SOME_CONSTANT = [VALUE_MAP.value1, VALUE_MAP.value2];

И метод, который использует SOME_CONSTANT, чтобы проверить, существует ли значение.

export const hasValue = (value: string) => SOME_CONSTANT.includes(value);

Это дает мне ошибку:

TS2345: Argument of type 'string' is not assignable to parameter of type 'VALUE_MAP'.

Использование (value: VALUE_MAP) => решит проблему, но я не хочу этого делать или, может быть, я хочу знать, почему VALUE_MAP используется как тип

Любая помощь?

Ответы [ 3 ]

0 голосов
/ 20 ноября 2018

Вам нужно ориентироваться на ES2016 или новее, если вы хотите использовать Array.includes, так как он не существовал в ECMAScript 5.

Например, этот tsconfig.json завершается ошибкой с описанной ошибкой:

{
    "compilerOptions": {
        "target": "ES5"
    }
}

А это tsconfig.json не:

{
    "compilerOptions": {
        "target": "es2016"
    }
}
0 голосов
/ 22 ноября 2018

После @Daniel A. White указал, что я должен использовать enum.Затем я получил небольшую подсказку и немного изменил код.Так что VALUE_MAP уже был enum.Я изменил его на constant, и это сработало.Спасибо всем за потраченное время и предложение.

Не получаю ошибок.

0 голосов
/ 20 ноября 2018

Вы должны использовать:

export const hasValue = (value) => SOME_CONSTANT.includes(value);

Без string для param.Если вы используете плагины Babel, это приведет к удалению типов параметров во время переноса.

Ввод:

function foo(one: string, two: number): string {}

Вывод:

function foo(one, two) {}

Таким образом, типы параметров недопустимы вES6.Вы можете использовать их, если код передается с помощью Babel (с плагинами для удаления).

...