#mongodb #typescript #meteor #collections #interface
#mongodb #typescript #метеор #Коллекции #интерфейс
Вопрос:
Я хочу описать Mongo.Схема сбора через интерфейс typescript для строгой проверки типа при выборке, forEach и т. Д.
interface IChat {
_id: string;
name?: string
};
const Chats = new Mongo.Collection<IChat>('chat');
// (method) Mongo.Cursor<IChat>.forEach(callback: <T>(doc: T, index: number, cursor: Mongo.Cursor<T>) => void, thisArg?: any): void
Chats.find().forEach(c => {
console.log(c._id); // Property '_id' does not exist on type 'T'.
// Why "type T" if it should be the type IChat???
});
Но столкнулся со следующей ошибкой: Property '_id' does not exist on type 'T'.
Что я делаю не так?
Комментарии:
1. ну, вы, кажется, определяете это самостоятельно. Поскольку вы его определяете, обратный
forEach
вызов получит первый аргумент типа T, который, как вы утверждаете, не имеет_id
поля — хотя на самом деле, конечно, это так, поскольку это документ в коллекции mongo. Ваше определение типа дляCollection.find().forEach()
неверно.2. Не могли бы вы опубликовать содержимое изображений в виде текста?
3. Не уверен, что я все делаю правильно, но я «заставил» аналогичный код работать на моей стороне, делая что-то вроде этого :
const Chats: Mongo.Collection<IChat> = new Mongo.Collection('chat');
Ответ №1:
В этом случае вы пропускаете .fetch()
вызов после .find()
.
Возможно, математически Meteor Mongo может обрабатывать синтаксис в том виде, в каком он у вас есть сейчас, но простой способ сделать Typescript счастливым здесь — настроить его следующим образом:
interface IChat {
_id: string;
name?: string
};
const Chats = new Mongo.Collection<IChat>('chat');
Chats.find().fetch().forEach(c => {
console.log(c._id);
});
ссылка на решение в Typescript Playground