@specs-feup/lara
Version:
A js port of the popular framework for building source-to-source compilers
58 lines • 1.68 kB
TypeScript
/**
* Options to construct the error
*/
export interface AbstractClassErrorOptions {
/**
* Whether the error is being thrown by an abstract constructor or method
*/
kind: "constructor" | "abstractMethod";
/**
* The base abstract class
*/
baseClass: any;
/**
* The derived class. Only used when building an error for an abstract method.
*/
derivedClass?: any;
/**
* The method that is not implemented. Only used when building an error for an abstract method.
*/
method?: any;
}
/**
* Custom error to be thrown when derived classes do not extend an abstract class correctly.
*
* To use the error correctly, write something like:
*
* @example
* ```js
* class AnAbstractClass {
* constructor() {
* if (this.constructor === AnAbstractClass) {
* throw new AbstractClassError({
* kind: "constructor",
* baseClass: AnAbstractClass,
* });
* // message: "AbstractClassError: Cannot instantiate abstract class AnAbstractClass."
* }
* }
*
* notImplementedMethod() {
* throw new AbstractClassError({
* kind: "abstractMethod",
* baseClass: AnAbstractClass,
* derivedClass: this.constructor,
* method: this.notImplementedMethod,
* });
* // message: "AbstractClassError: Derived class ADerivedClass has not implemented abstract method AnAbstractClass::notImplementedMethod."
* }
* }
* ```
*
* Formats a message like:
* "AbstractClassError:
*/
export default class AbstractClassError extends Error {
constructor(options: AbstractClassErrorOptions);
}
//# sourceMappingURL=AbstractClassError.d.ts.map