Skip to content

Function: derive()

derive<M, K>(model, keys?): Pick<M, K>

Defined in: packages/model/src/derive.ts:35

Derives extensions from a given model.

Extensions are properties and methods you define as the second argument in model creation function.

Type Parameters

M

M extends Model<any> | SafeModel<any>

Type of the model

K

K extends string | number | symbol = Exclude<keyof M, BaseProp>

Type of the extension keys to pick from the model

Parameters

model

M

The source model to derive properties from

keys?

K[]

Optional array of specific extension keys to pick. If not provided, picks all extensions

Returns

Pick<M, K>

An object containing only the selected extensions from the model

Example

typescript
const Person = createModel(z.object({ name: z.string() }), {
  greet: (p: { name: string }) => `Hello, ${p.name}!`,
});

const Employee = createModel(Person.schema.extend({
  id: z.string(),
}), {
  ...derive(Person),
  getBadge: (emp: { id: string }) => `EMP-${emp.id}`,
});

const emp = Employee.from({ name: 'John', id: '123' });
Employee.greet(emp);    // "Hello, John!"
Employee.getBadge(emp); // "EMP-123"