#typescript #ramda.js
Вопрос:
У меня есть эта небольшая функция, firstOrNull:
import { propOr } from 'ramda'
export const firstOrNull = propOr(null, '0')
И я хочу использовать со свойством, которое возвращает QueryDocumentSnapshot<DocumentData>[]
const organization = firstOrNull(snapshot.docs)?.data() as Organization
Из-за отсутствия ввода firstOrNull
я получил ошибку:
Объект имеет тип «неизвестный»
Что мне нужно сделать, чтобы использовать правильный ввод в firstOrNull?
Может быть изменено на что-то подобное:
export const firstOrNull:<T[]> = propOr<null, T, number>(null, 0)
Комментарии:
1.
npm install @types/ramda
, см. Ссылку npmjs.com/package/@types/ramda2. Я уже
@types/ramda
установил3.
snapshot.docs
Правильно ли напечатано?4. ДА. Он правильно напечатан с
QueryDocumentSnapshot<DocumentData>[]
5. Может быть, мне нужно что-то вроде этого: export const firstOrNull:<T[]> = propOr<null, T, number>(null, 0) (я обновил свой вопрос этим)
Ответ №1:
Добавьте явный тип firstOrNull
, который зависит от получаемого массива, чтобы он мог определить правильный тип:
export const firstOrNull: <T>(arr: T[]) => T | null = propOr(null, '0')
Комментарии:
1. Это сработало как шарм
2. Всякий
@types/ramda
раз, когда перестает выводить правильные типы, просто добавьте явную типизацию, чтобы решить ее. Я надеюсь, что они скоро улучшатся@types/ramda
.3. Большинство из нас в команде Ramda мало знают об TS, и мы зависим от людей, которые поддерживают эти файлы ввода. Я полагаю, что недавние изменения означают, что TS, по крайней мере, близок к тому, чтобы поддерживать более сложные подписи Ramda, но я не знаю, завершена ли она или какие есть пробелы. Я предполагаю, что те, кто поддерживает эти типы, будут признательны за помощь от тех, кто знает как Ramda, так и TS.