скиньте плейграунд с ретерном, без внутренней логики
Вот, выложил https://goo.su/ojgZG
а с какими аргументами должна функция вызываться? data это объект без id изначально и при возврате ему должно добавляться id?
Да, я записываю объект на сервер. Сервер в объекте response должен вернуть id. Я из функции, если всё ок, возвращаю data с добаленным свойством id
Аргументы у функции название коллекции collectionName и объект данных data, нов плейграунде collectionName не используется, забыл убрать
const createDocument = async <T extends Exclude<Object, { id: any }>>( collectionName: string, data: T ): Promise<T & { id: string }> как-то так, если правильно понял не знаю какая задача стоит, можно ли передавать в аргументы data c уже существующим id, если да то можно ограничиться extends Object
Да, так срабатывает, спасибо! А из-за чего была ошибка? TS считал, что может вернуться id c другим типом, чем string?
И в данную функцию приходит объект без свойства id
тогда Exclude должен работать и выдавать ошибку, если с id уже передать
я если честно не сразу понял в чем замысел ваш там конфликт между Omit и extends {id: string} он считает что T это объект с одним ключом и вы пытались омитить этот единственный ключ
Замысел в том, в функцию createDocument передавать объект. Она этот объект записывается на сервер при помощи функции addDoc (или p в плейграунде). Сервер возвращает id записанного объекта. Мы этот id добавляем в исходный объект и возвращаем из createDocument
А правильно я понимаю, что дженерик <T extends {id: string}> значит: любой объект, в котором обязательно должно быть свойство id: string ?
нет, объект с единственным ключом id типа стринг
А как написать любой объект, в котором обязательно должно быть свойство id: string ?
type AnyObjectWithId = { [key: string]: any; id: string; };
А чем отличается дженерик <T extends { [key: string]: any; id: string;}> от <{ [key: string]: any; id: string;}> ? Прошу прощения за, может быть, глупый вопрос. Недопонимаю смысл extends в дженерике
extends в джериках можно представить как сравнение, а не расширение
Обсуждают сегодня