«включает» не существует для типа «строка []» в TypeScript

Из этого вопроса и принятого ответа я знаю, что существует метод проверить, содержит ли массив объект в JavaScript, используя эту строку кода:

> ['joe', 'jane', 'mary'].includes('jane');
true 

Однако, если я использую тот же код в TypeScript, я получаю эту ошибку:

Свойство includes не существует для типа string[].

  1. Почему компилятор выдает эту ошибку? Я ожидаю, что все, что доступно в JS, доступно и в TS.
  2. Как я могу решить эту ошибку, не меняя код? Он должен работать на ES5.

person H. Pauwelyn    schedule 06.03.2019    source источник
comment
@Baboo_: Это не дубликат, потому что мой вопрос касается TypeScript, а не JavaScript, как в предоставленной вами ссылке!   -  person H. Pauwelyn    schedule 06.03.2019
comment
Я пропустил скопированную ссылку, которую вы предоставили, это та, которую я хотел предоставить;)   -  person Baboo    schedule 06.03.2019


Ответы (1)


Включает определение в lib.es2016.array.include.d.ts, так как оно является частью стандарта es2016. Вы можете включить эту библиотеку в свой tsconfig, но вы должны предоставить свой собственный полифил для метода:

{
    "compilerOptions": {
        "target": "es5",
        "lib": [
            "dom",
            "scripthost",
            "es5",
            "es2016.array.include"
        ]
    }
}

Вы также можете предоставить полифилл, назначив Array.prototype.include, если ваша среда выполнения не предоставляет этот метод для массива (вы можете получить полифилл из здесь например)

person Titian Cernicova-Dragomir    schedule 06.03.2019