Вот эта строка. Ты говоришь - если элемент массива не равен себе как строке, верни этот элемент. Но предикат для .filter (а это и есть функция, которую ты подаешь на вход фильтра) должен вернуть или true или false, но не само значение. В предикате фильтра мы ставим условие, и если это условие выполняется, то элемент попадает в результирующий массив, и наоборот.
То есть результат выполнения предиката внутри фильтра проверяется только на true или false для каждого элемента. Именно это и заставляет 0 приводиться к false в данном случае (тут уже работают правила приведения типов).
zooks, у TypeScript иные задачи. Убери типизацию - и у тебя код на ES8. Добавь типизацию - у тебя код на TS. В этом весь фокус.
TS он не для браузеров придуман, а для улучшения самого процесса разработки, за счёт отличного IntelliSense, почти статического анализа кода, раннего выявления потенциальных ошибок на этапе написания кода.
И при всём при этом он, в отличие от того же CoffeScript, сам язык не меняет, а лишь надстраивается над основным сетом языка. Потому переход с обычного ES на TS может происходить плавно, так же как и обратный процесс.
молодец