Skip to content

Type Alias: InferredReactiveModelConstructor<ObjectMap, Options, K, H>

ts
type InferredReactiveModelConstructor<ObjectMap, Options, K, H> =
  Options["hooks"] extends {
    wrapReactiveModel: infer Hook;
  }
    ? Hook extends WrapReactiveModelHook<
        ObjectMap[K],
        Options["models"][K]["primaryKey"],
        Options["models"][K]["relationships"],
        infer Output
      >
      ? Output
      : ReactiveModelConstructor<
          ObjectMap,
          ObjectMap[K],
          Options["models"][K]["primaryKey"],
          Options["models"][K]["relationships"],
          H
        >
    : ReactiveModelConstructor<
        ObjectMap,
        ObjectMap[K],
        Options["models"][K]["primaryKey"],
        Options["models"][K]["relationships"],
        H
      >;

Utility type to extract the correct ReactiveModelConstructor for a specified key from ReactiveDatabaseOptions.

Type Parameters

Type ParameterDefault typeDescription
ObjectMap extends Record<string, PlainObject>-The object map of all models.
Options extends ReactiveDatabaseOptions<ObjectMap>-The ReactiveDatabaseOptions type.
K extends Extract<keyof ObjectMap, string> & Extract<keyof Options["models"], string>-The key of the model to extract the constructor for.
H extends Required<ReactiveDatabaseOptions<ObjectMap>["hooks"]>Required<ReactiveDatabaseOptions<ObjectMap>["hooks"]>-

Example

typescript
type User = { id: number; name: string }
type Profile = { id: number; userId: number; bio?: string }

type ObjectMap = {
  user: User
  profile: Profile
}

const options: ReactiveDatabaseOptions<ObjectMap> = {
  ...
  models: {
    user: {
      schema: '++id,name',
      properties: ['id', 'name'],
      primaryKey: 'id',
      relationships: {
        profile: [HasOne, 'profile', 'userId'],
      },
    },
    profile: {
      schema: '++id,userId',
      properties: ['id', 'userId', 'bio'],
      primaryKey: 'id',
      relationships: {
        user: [BelongsTo, 'user', 'userId'],
      },
    },
  },
  ...
}

let UserModel: InferredReactiveModelConstructor<ObjectMap, typeof options, 'user'>
let ProfileModel: InferredReactiveModelConstructor<ObjectMap, typeof options, 'profile'>