deno.land / x / mongoose@6.7.5 / test / types / discriminator.test.ts
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879import mongoose, { Document, Model, Schema, SchemaDefinition, SchemaOptions, Types, model } from 'mongoose';
const schema: Schema = new Schema({ name: { type: 'String' } });
interface IBaseTest extends Document { name?: string;}
interface IDiscriminatorTest extends IBaseTest { email?: string;}
const Base = model<IBaseTest>('Test', schema);const Disc = Base.discriminator<IDiscriminatorTest>('Test2', new Schema({ email: { type: String } }));
const doc: IDiscriminatorTest = new Disc({ name: 'foo', email: 'hi' });
doc.name = 'bar';doc.email = 'hello';
const Disc2 = Base.discriminator<IDiscriminatorTest>( 'Disc2', new Schema({ email: { type: String } }), { value: 'test', mergeHooks: false, mergePlugins: false });
function test(): void { enum CardType { Artifact = 'artifact', Creature = 'creature', Enchantment = 'enchantment', Land = 'land', }
interface CardDb extends Document { _id: Types.ObjectId; type: CardType; }
interface LandDb extends CardDb { type: CardType.Land; }
const cardDbBaseSchemaDefinition: SchemaDefinition = { type: { type: String, required: true } };
const cardDbSchemaOptions: SchemaOptions = { discriminatorKey: 'type' };
const cardDbSchema: Schema = new Schema( cardDbBaseSchemaDefinition, cardDbSchemaOptions );
const cardDbModel: Model<CardDb> = mongoose.model<CardDb>( 'Card', cardDbSchema, 'card' );
const landDbAdditionalPropertiesSchemaDefinition: SchemaDefinition = {};
const landDbSchema: Schema = new Schema( landDbAdditionalPropertiesSchemaDefinition );
const landDbModel: Model<LandDb> = cardDbModel.discriminator<LandDb>( 'Land', landDbSchema, CardType.Land );
const sampleLandDb: LandDb = new landDbModel({ type: CardType.Land });
const sampleCardDb: CardDb = sampleLandDb;}
Version Info