2016-09-12 4 views
0

У меня есть модель мангуста с интерфейсом объявляющий его как таковой:Сокращение интерфейса в машинописном

export interface IUserDocument extends mongoose.Document { 
    surname: string; 
    lastName: string; 
} 

export interface IUserModel extends mongoose.Model<IUserDocument> { 
    myStaticMethodGoesHere(signature: string): void; 
} 

и соответствующей мангуста схемы:

const UserSchema = new mongoose.Schema({ 
    surname: {type: String, required: true}, 
    lastname: {type: String, required: true}, 
}) 

Теперь я должен определить, как мой Пользователь структурированный в 2 раза (схема интерфейса мангуста и машинописный интерфейс), которая не является СУХОЙ и неудобной. К сожалению, если я хочу использовать lean метод мангуст, я должен определить еще другой интерфейс:

export interface ILeanUserDocument { 
    _id: mongoose.Types.ObjectId; 
    __v: number; 
    surname: string; 
    lastName: string; 
} 

Это неудобно и к ошибкам. Есть ли способ для моего скудного интерфейса расширить (я не знаю, глагол, чтобы использовать здесь) мой интерфейс IUserDocument, но удалить из него вещи?

ответ

2

Расширения - это не единственный способ добавить свойства к интерфейсу. Я считаю, что вы можете работать с type intersection, чтобы достичь того, что ищете. Обратите внимание, что в приведенном ниже примере все имена - это только мои догадки относительно того, что будет уместно, не стесняйтесь выбирать все, что вам нравится.

Вы можете определить интерфейс

export interface IUserProperties { 
    surname: string; 
    lastName: string; 
} 

export type IUserDocument = mongoose.Document & IUserProperties; 

, а затем позже

interface ILeanUserBase { 
    _id: mongoose.Types.ObjectId; 
    __v: number; 
} 

export type ILeanUserDocument = ILeanUserBase & IUserProperties; 

Изменения в IUserProperties будут отражены в обоих IUserModel и IUserDocument

Смежные вопросы