Skip to content

Documentation / @andrew_l/tl-pack / defineStructure

Function: defineStructure() ​

defineStructure<PropsOptions, T>(__namedParameters): Constructor<T>

Create binary structure definition with type safety and performance optimization

Type Parameters ​

PropsOptions ​

PropsOptions extends ObjectPropsOptions<Data>

T ​

T extends Data = ExtractPropTypes<PropsOptions>

Parameters ​

__namedParameters ​

DefineStructureOptions<PropsOptions>

Returns ​

Constructor<T>

Examples ​

ts
// Define a user structure
const User = defineStructure({
  name: 'User',
  version: 1,
  checksum: true,
  properties: {
    id: { type: Number, required: true },
    name: { type: String, required: true },
    email: { type: String, required: false },
    isActive: { type: Boolean, required: true },
    createdAt: { type: Date, required: true },
    tags: { type: Array, required: false }
  }
});

// Create and serialize a user
const user = new User({
  id: 123,
  name: 'John Doe',
  email: 'john@example.com',
  isActive: true,
  createdAt: new Date(),
  tags: ['admin', 'verified']
});

const buffer = user.toBuffer();
const restored = User.fromBuffer(buffer);
ts
// Define nested structures
const Address = defineStructure({
  name: 'Address',
  version: 1,
  properties: {
    street: { type: String, required: true },
    city: { type: String, required: true },
    zipCode: { type: String, required: true }
  }
});

const Person = defineStructure({
  name: 'Person',
  version: 1,
  properties: {
    name: { type: String, required: true },
    address: { type: Address, required: false }
  }
});
ts
// Using with complex data types
const GameState = defineStructure({
  name: 'GameState',
  version: 2,
  checksum: true,
  properties: {
    playerData: { type: Object, required: true },      // Untrusted data
    screenshot: { type: Uint8Array, required: false }, // Binary data
    timestamp: { type: Date, required: true },
    metadata: { type: Object, required: false }
  }
});