Следующий пример чуть сложнее:
const robots = ["R2-D2", "BB-8"]
const isRobot = robots.includes(790)
TS запрещает такое писать, т.к. тип выводится из массива Array<T>.includes. Поэтому я могу передать в includes только строку.
⬇️
Моя логика такая: у меня в справочнике есть список фруктов и я хочу узнать, является ли арбуз фруктом или нет. Я ожиданию простой ответ - да или нет?
includes(val: any): boolean
Но TS говорит мне, что я не могу задавать такой вопрос. Где массив создавали туда и обращайтесь.
А как там у нормальных пацанов? В C# нет includes, но есть indexOf:
string[] robots = { "R2-D2", "BB-8" };
int lexx = 790;
int pos = Array.IndexOf(robots, lexx);
C# не ругается, спокойно возвращает -1.
docs.microsoft.com/ru-ru/dotnet/a…
Если же вы посмотрите на includes как на Boolean(Array.find()), то все встанет на свои места.
Но я все равно не согласен с таким поведением. Рано или поздно TS это исправит, как исправили isFinite. Запомните этот твит.
