ecsjs
Version:
An entity component system library for JavaScript
53 lines • 1.61 kB
TypeScript
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