#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, но ни я, ни кто-либо из основной команды не особенно разбираемся в машинописи. Обычно мы рекомендуем вам проверить эти проблемы у тех, кто ведет ваши файлы типизаций.