38 lines
880 B
TypeScript
38 lines
880 B
TypeScript
/**
|
|
* ViewData contract
|
|
*
|
|
* Represents the shape of data that can be passed to Templates.
|
|
*
|
|
* Based on VIEW_DATA.md:
|
|
* - JSON-serializable only
|
|
* - Contains only template-ready values (strings/numbers/booleans)
|
|
* - MUST NOT contain class instances
|
|
*
|
|
* This is a type-level contract, not a class-based one.
|
|
*/
|
|
|
|
import type { JsonValue, JsonObject } from '../types/primitives';
|
|
|
|
/**
|
|
* Base interface for ViewData objects
|
|
*
|
|
* All ViewData must be JSON-serializable.
|
|
* This type ensures no class instances or functions are included.
|
|
*/
|
|
export interface ViewData extends JsonObject {
|
|
[key: string]: JsonValue;
|
|
}
|
|
|
|
/**
|
|
* Helper type to ensure a type is ViewData-compatible
|
|
*
|
|
* Usage:
|
|
* ```typescript
|
|
* type MyViewData = ViewData & {
|
|
* title: string;
|
|
* count: number;
|
|
* items: string[];
|
|
* };
|
|
* ```
|
|
*/
|
|
export type ViewDataOf<T extends ViewData> = T; |