UNPKG

ecsjs

Version:

An entity component system library for JavaScript

53 lines 1.61 kB
export declare const ComponentMapKey = "ComponentMap"; export declare const ComponentClassesMapKey = "ComponentClassesMap"; export type KeyCollection<T> = { [key: string]: T; }; export interface Component { } /** * @category Types * @example * * class PositionComponent { * constructor(x, y) { * this.x = x; * this.y = y; * } * } */ export type ComponentClass<ComponentInstance> = new (...args: any[]) => ComponentInstance; /** * Used for infering generic type spread for classes */ export type ComponentClasses<TClasses extends Component[]> = { [Index in keyof TClasses]: TClasses[Index]; }; /** * Used for infering generic type spread for class instances */ export type ComponentInstances<TClasses extends ComponentClass<any>[]> = TClasses['length'] extends 1 ? TClasses[0] extends ComponentClass<infer R> ? R : never : { [Index in keyof TClasses]: TClasses[Index] extends ComponentClass<infer R> ? R : never; }; export type IteratorResult<T> = { done: boolean; value: T; }; export type Iterator<T> = { next: () => IteratorResult<T>; reset: () => void; [Symbol.iterator]: () => Iterator<T>; }; /** * allow late bound assignment type for intellisense * @category Types * @example * * let someIterator: IComponentIterator<[Player, Position]> * * // assignment made somewhere else in the code * const [player, position] = someIterator(Player, Position) ?? [] * position?.x = 123 // position will have intellisense */ export type IComponentIterator<T extends Component[]> = Iterator<ComponentClasses<[number, ...T]>>; //# sourceMappingURL=types.d.ts.map