Труба машинописного текста Ramda «Ожидал 0 аргументов, но получил 1. TS2554» не выбирал перегрузки

#typescript #ramda.js

Вопрос:

В JavaScript у меня была следующая простая ramda функция:

 const isStringOk = (val) => pipe(String, cleanString, (v)=> !!v)(val);
 

Когда я попытался преобразовать его в скрипт типа, я получил следующую ошибку:

Expected 0 arguments, but got 1. TS2554

Перегрузки типов отображались в intelisense, но компилятор почему-то не улавливал их.

Сначала я определил тип функции как:

 type StingToBoolType = (value: string) => boolean;
 

Затем я попытался следовать:

 const isStringOkPipe : StingToBoolType = pipe<string, string, boolean>(String, cleanString, (v)=> !!v);
const isStringOk = (val: string) => isStringOkPipe(val);
 

Итак, наконец, это окончательное решение:

 const isStringOk = (val) => (pipe(String, cleanString, (v)=> !!v) as StingToBoolType)(val);
 

Итак, решение состоит в том, чтобы выполнить кастинг : «… как тип StingToBoolType»

Я пишу этот метод, так как не нашел его в предыдущем решении, может быть, кому-то он покажется полезным.

Если у вас есть более сжатый способ решить эту проблему (определить правильную перегрузку функций) — пожалуйста, не стесняйтесь комментировать.

Спасибо,

Комментарии:

1. У меня нет предложений по машинописи, но, похоже, вашу функцию можно было бы написать проще, как const isStringOk = pipe(String, cleanString, Boolean) .

2. Спасибо за предложение, но эта функция была просто упрощенным примером реальной реализации.

3. Я не удивлен. Я один из основателей Ramda, но ни я, ни кто-либо из основной команды не особенно разбираемся в машинописи. Обычно мы рекомендуем вам проверить эти проблемы у тех, кто ведет ваши файлы типизаций.