Skip to content

Commit c4416a6

Browse files
committed
types(schematypes): allow defining map path using type: 'Map'
Fix #13755
1 parent 09e8445 commit c4416a6

File tree

4 files changed

+11
-13
lines changed

4 files changed

+11
-13
lines changed

test/types/maps.test.ts

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { Schema, model, Document, Model, Types } from 'mongoose';
2+
import { expectType } from 'tsd';
23

34
interface ITest {
45
map1: Map<string, number>,
@@ -73,17 +74,14 @@ function gh10872(): void {
7374
}
7475

7576
function gh13755() {
76-
class Test {
77-
instance: Map<string, string>;
78-
constructor() {
79-
this.instance = new Map<string, string>();
80-
}
81-
}
82-
83-
const testSchema = new Schema<Test>({
77+
const testSchema = new Schema({
8478
instance: {
8579
type: 'Map',
86-
of: 'Mixed'
80+
of: String
8781
}
88-
});
82+
} as const);
83+
84+
const TestModel = model('Test', testSchema);
85+
const doc = new TestModel();
86+
expectType<Map<string, string> | undefined>(doc.instance);
8987
}

test/types/schemaTypeOptions.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ expectType<BooleanSchemaDefinition | undefined>(new SchemaTypeOptions<boolean>()
2222
expectType<NumberSchemaDefinition | undefined>(new SchemaTypeOptions<number>().type);
2323
expectType<DateSchemaDefinition | undefined>(new SchemaTypeOptions<Date>().type);
2424
expectType<StringSchemaDefinition | undefined>(new SchemaTypeOptions<string>().type);
25-
expectType<SchemaDefinition<typeof Map> | SchemaDefinition<'Map'> | undefined>(new SchemaTypeOptions<Map<any, any>>().type);
25+
expectType<SchemaDefinition<typeof Map> | undefined>(new SchemaTypeOptions<Map<any, any>>().type);
2626
expectType<SchemaDefinition<typeof Buffer> | undefined>(new SchemaTypeOptions<Buffer>().type);
2727
expectType<ObjectIdSchemaDefinition | undefined>(new SchemaTypeOptions<Types.ObjectId>().type);
2828
expectType<AnyArray<ObjectIdSchemaDefinition> | AnyArray<SchemaTypeOptions<ObjectId>> | undefined>(new SchemaTypeOptions<Types.ObjectId[]>().type);

types/inferschematype.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,7 @@ type ResolvePathType<PathValueType, Options extends SchemaTypeOptions<PathValueT
219219
PathValueType extends 'bigint' | 'BigInt' | typeof Schema.Types.BigInt ? bigint :
220220
PathValueType extends 'uuid' | 'UUID' | typeof Schema.Types.UUID ? Buffer :
221221
IfEquals<PathValueType, Schema.Types.UUID> extends true ? Buffer :
222-
PathValueType extends MapConstructor ? Map<string, ResolvePathType<Options['of']>> :
222+
PathValueType extends MapConstructor | 'Map' ? Map<string, ResolvePathType<Options['of']>> :
223223
IfEquals<PathValueType, typeof Schema.Types.Map> extends true ? Map<string, ResolvePathType<Options['of']>> :
224224
PathValueType extends ArrayConstructor ? any[] :
225225
PathValueType extends typeof Schema.Types.Mixed ? any:

types/schematypes.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ declare module 'mongoose' {
4545
T extends number ? NumberSchemaDefinition :
4646
T extends boolean ? BooleanSchemaDefinition :
4747
T extends NativeDate ? DateSchemaDefinition :
48-
T extends Map<any, any> ? SchemaDefinition<typeof Map> | SchemaDefinition<'Map'> :
48+
T extends Map<any, any> ? SchemaDefinition<typeof Map> :
4949
T extends Buffer ? SchemaDefinition<typeof Buffer> :
5050
T extends Types.ObjectId ? ObjectIdSchemaDefinition :
5151
T extends Types.ObjectId[] ? AnyArray<ObjectIdSchemaDefinition> | AnyArray<SchemaTypeOptions<ObjectId, EnforcedDocType>> :

0 commit comments

Comments
 (0)