Use Without "emitDecoratorMetadata"
Typegoose can be used without the option emitDecoratorMetadata
, but it is generally recommended to enable it for auto-inferring from the typescript type.
Advantages to "emitDecoratorMetadata"
When using emitDecoratorMetadata
, it is not needed to be explicit about everything, like the following example would simply "compile" into the appropriate types.
info
Some properties (like Arrays & Maps) need to be always explicit, see @prop
Array Options.
class Kitten {
@prop({ required: true }) // Not needed to be explicit that this property is a "String"
public name!: string;
@prop({ type: () => [String], required: true })
public friendNames!: string[];
@prop({ type: () => Number, required: true })
public favoritePlacePriority!: Map<string, number>;
}
But when not using emitDecoratorMetadata
, every property needs to be explicitly defined:
class Kitten {
@prop({ type: () => String, required: true }) // Needs to be explicitly defined, because "emitDecoratorMetadata" is not enabled
public name!: string;
@prop({ type: () => [String], required: true }, PropType.ARRAY)
public friendNames!: string[];
@prop({ type: () => Number, required: true }, PropType.MAP)
public favoritePlacePriority!: Map<string, number>;
}
Look here for what PropType
is