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 Parameter | Default type | Description |
|---|---|---|
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'>