Add a new model class type.

This commit is contained in:
Madeorsk 2024-10-04 17:06:59 +02:00
parent 22bc42acba
commit 419b838f54
Signed by: Madeorsk
GPG key ID: 677E51CA765BB79F
2 changed files with 8 additions and 3 deletions

View file

@ -1,6 +1,6 @@
{
"name": "@sharkitek/core",
"version": "3.0.0",
"version": "3.0.1",
"description": "TypeScript library for well-designed model architectures.",
"keywords": [
"deserialization",

View file

@ -34,6 +34,11 @@ export type SerializedModel<Shape extends ModelShape> = {
*/
export type Model<Shape extends ModelShape, IdentifierType = unknown> = ModelDefinition<Shape, IdentifierType> & PropertiesModel<Shape>;
/**
* Type of a model class.
*/
export type ModelClass<Shape extends ModelShape, Identifier extends keyof Shape = any> = ConstructorOf<Model<Shape, IdentifierType<Shape, Identifier>>>;
/**
* Identifier type.
*/
@ -91,7 +96,7 @@ export interface ModelDefinition<Shape extends ModelShape, IdentifierType>
export function model<Shape extends ModelShape, Identifier extends keyof Shape = any>(
shape: Shape,
identifier?: Identifier,
): ConstructorOf<Model<Shape, IdentifierType<Shape, Identifier>>>
): ModelClass<Shape, Identifier>
{
// Get shape entries.
const shapeEntries = Object.entries(shape) as [keyof Shape, UnknownDefinition][];
@ -227,5 +232,5 @@ export function model<Shape extends ModelShape, Identifier extends keyof Shape =
return diff; // Return the difference.
}
} as unknown as ConstructorOf<Model<Shape, IdentifierType<Shape, Identifier>>>;
} as unknown as ModelClass<Shape, Identifier>;
}