declare module "./kernel" { interface Dojo { declare: declare.Declare; safeMixin: typeof declare.safeMixin; } } declare namespace declare { interface DeclareCreatedObject { declaredClass: string; /** * Calls a super method. * * This method is used inside method of classes produced with * declare() to call a super method (next in the chain). It is * used for manually controlled chaining. Consider using the regular * chaining, because it is faster. Use "this.inherited()" only in * complex cases. * * This method cannot me called from automatically chained * constructors including the case of a special (legacy) * constructor chaining. It cannot be called from chained methods. * * If "this.inherited()" cannot find the next-in-chain method, it * does nothing and returns "undefined". The last method in chain * can be a default method implemented in Object, which will be * called last. * * If "name" is specified, it is assumed that the method that * received "args" is the parent method for this call. It is looked * up in the chain list and if it is found the next-in-chain method * is called. If it is not found, the first-in-chain method is * called. * * If "name" is not specified, it will be derived from the calling * method (using a methoid property "nom"). */ inherited(args: IArguments, newArgs?: any[]): U; inherited(args: IArguments, newArgs?: true): Function | void; inherited(name: string, args: IArguments, newArgs?: any[]): U; inherited(name: string, args: IArguments, newArgs?: true): Function | void; /** * Returns a super method. * * This method is a convenience method for "this.inherited()". * It uses the same algorithm but instead of executing a super * method, it returns it, or "undefined" if not found. */ getInherited(args: IArguments): Function | void; getInherited(name: string, args: IArguments): Function | void; /** * Checks the inheritance chain to see if it is inherited from this class. * * This method is used with instances of classes produced with * declare() to determine of they support a certain interface or * not. It models "instanceof" operator. */ isInstanceOf(cls: any): boolean; } interface DeclareConstructor { new(...args: any[]): T & DeclareCreatedObject; prototype: T; /** * Adds all properties and methods of source to constructor's * prototype, making them available to all instances created with * constructor. This method is specific to constructors created with * declare(). * * Adds source properties to the constructor's prototype. It can * override existing properties. * * This method is similar to dojo.extend function, but it is specific * to constructors produced by declare(). It is implemented * using dojo.safeMixin, and it skips a constructor property, * and properly decorates copied functions. */ extend(source: U): DeclareConstructor; /** * Create a subclass of the declared class from a list of base classes. * * Create a constructor using a compact notation for inheritance and * prototype extension. * * Mixin ancestors provide a type of multiple inheritance. * Prototypes of mixin ancestors are copied to the new class: * changes to mixin prototypes will not affect classes to which * they have been mixed in. */ createSubclass(mixins: [DeclareConstructor, DeclareConstructor], props: X): DeclareConstructor; createSubclass(mixins: [DeclareConstructor], props: V): DeclareConstructor; createSubclass(mixins: DeclareConstructor, props: V): DeclareConstructor; createSubclass(mixins: [DeclareConstructor]): DeclareConstructor; createSubclass(mixins: DeclareConstructor): DeclareConstructor; createSubclass(mixins: any, props: U): DeclareConstructor; } interface Declare { (superClass: [DeclareConstructor, DeclareConstructor, DeclareConstructor, DeclareConstructor]): DeclareConstructor; (superClass: [DeclareConstructor, DeclareConstructor, DeclareConstructor]): DeclareConstructor; (superClass: [DeclareConstructor, DeclareConstructor]): DeclareConstructor; (superClass: DeclareConstructor | [DeclareConstructor]): DeclareConstructor; (superClass: [DeclareConstructor, DeclareConstructor, DeclareConstructor, DeclareConstructor], props: E): DeclareConstructor; (superClass: [DeclareConstructor, DeclareConstructor, DeclareConstructor], props: D): DeclareConstructor; (superClass: [DeclareConstructor, DeclareConstructor], props: C): DeclareConstructor; (superClass: DeclareConstructor | [DeclareConstructor], props: B): DeclareConstructor; (className: string, superClass: [DeclareConstructor, DeclareConstructor, DeclareConstructor, DeclareConstructor]): DeclareConstructor; (className: string, superClass: [DeclareConstructor, DeclareConstructor, DeclareConstructor]): DeclareConstructor; (className: string, superClass: [DeclareConstructor, DeclareConstructor]): DeclareConstructor; (className: string, superClass: DeclareConstructor | [DeclareConstructor]): DeclareConstructor; (className: string, superClass: [DeclareConstructor, DeclareConstructor, DeclareConstructor, DeclareConstructor], props: E): DeclareConstructor; (className: string, superClass: [DeclareConstructor, DeclareConstructor, DeclareConstructor], props: D): DeclareConstructor; (className: string, superClass: [DeclareConstructor, DeclareConstructor], props: C): DeclareConstructor; (className: string, superClass: DeclareConstructor | [DeclareConstructor], props: B): DeclareConstructor; (className: string, superClass: any, props: A): DeclareConstructor; (className: string, superClass: any): DeclareConstructor; (superClass: any, props: A): DeclareConstructor; (superClass: any): DeclareConstructor; /** * Mix in properties skipping a constructor and decorating functions * like it is done by declare(). */ safeMixin(target: A, source: B): A & B; } } declare const declare: declare.Declare; export = declare;