21 lines
578 B
TypeScript
21 lines
578 B
TypeScript
import {Type} from "./Utils.js";
|
|
|
|
export default interface Extendable<ComponentClass> {
|
|
as<C extends ComponentClass>(type: Type<C>): C;
|
|
|
|
asOptional<C extends ComponentClass>(type: Type<C>): C | null;
|
|
|
|
has<C extends ComponentClass>(type: Type<C>): boolean;
|
|
|
|
/**
|
|
* @throws MissingComponentError
|
|
*/
|
|
require<C extends ComponentClass>(type: Type<C>): void;
|
|
}
|
|
|
|
export class MissingComponentError<ComponentClass> extends Error {
|
|
public constructor(type: Type<ComponentClass>) {
|
|
super(`Required component ${type.name} was not found.`);
|
|
}
|
|
}
|