1
|
/**
|
2
|
* @license
|
3
|
* Copyright Google Inc. All Rights Reserved.
|
4
|
*
|
5
|
* Use of this source code is governed by an MIT-style license that can be
|
6
|
* found in the LICENSE file at https://angular.io/license
|
7
|
*/
|
8
|
import { Type } from '../type';
|
9
|
/**
|
10
|
* Declares the interface to be used with {@link Class}.
|
11
|
*
|
12
|
* @stable
|
13
|
*/
|
14
|
export declare type ClassDefinition = {
|
15
|
/**
|
16
|
* Optional argument for specifying the superclass.
|
17
|
*/
|
18
|
extends?: Type<any>;
|
19
|
/**
|
20
|
* Required constructor function for a class.
|
21
|
*
|
22
|
* The function may be optionally wrapped in an `Array`, in which case additional parameter
|
23
|
* annotations may be specified.
|
24
|
* The number of arguments and the number of parameter annotations must match.
|
25
|
*
|
26
|
* See {@link Class} for example of usage.
|
27
|
*/
|
28
|
constructor: Function | any[];
|
29
|
} & {
|
30
|
/**
|
31
|
* Other methods on the class. Note that values should have type 'Function' but TS requires
|
32
|
* all properties to have a narrower type than the index signature.
|
33
|
*/
|
34
|
[x: string]: Type<any> | Function | any[];
|
35
|
};
|
36
|
/**
|
37
|
* An interface implemented by all Angular type decorators, which allows them to be used as ES7
|
38
|
* decorators as well as
|
39
|
* Angular DSL syntax.
|
40
|
*
|
41
|
* DSL syntax:
|
42
|
*
|
43
|
* ```
|
44
|
* var MyClass = ng
|
45
|
* .Component({...})
|
46
|
* .Class({...});
|
47
|
* ```
|
48
|
*
|
49
|
* ES7 syntax:
|
50
|
*
|
51
|
* ```
|
52
|
* @ng.Component({...})
|
53
|
* class MyClass {...}
|
54
|
* ```
|
55
|
* @stable
|
56
|
*/
|
57
|
export interface TypeDecorator {
|
58
|
/**
|
59
|
* Invoke as ES7 decorator.
|
60
|
*/
|
61
|
<T extends Type<any>>(type: T): T;
|
62
|
(target: Object, propertyKey?: string | symbol, parameterIndex?: number): void;
|
63
|
/**
|
64
|
* Storage for the accumulated annotations so far used by the DSL syntax.
|
65
|
*
|
66
|
* Used by {@link Class} to annotate the generated class.
|
67
|
*/
|
68
|
annotations: any[];
|
69
|
/**
|
70
|
* Generate a class from the definition and annotate it with {@link TypeDecorator#annotations}.
|
71
|
*/
|
72
|
Class(obj: ClassDefinition): Type<any>;
|
73
|
}
|
74
|
/**
|
75
|
* Provides a way for expressing ES6 classes with parameter annotations in ES5.
|
76
|
*
|
77
|
* ## Basic Example
|
78
|
*
|
79
|
* ```
|
80
|
* var Greeter = ng.Class({
|
81
|
* constructor: function(name) {
|
82
|
* this.name = name;
|
83
|
* },
|
84
|
*
|
85
|
* greet: function() {
|
86
|
* alert('Hello ' + this.name + '!');
|
87
|
* }
|
88
|
* });
|
89
|
* ```
|
90
|
*
|
91
|
* is equivalent to ES6:
|
92
|
*
|
93
|
* ```
|
94
|
* class Greeter {
|
95
|
* constructor(name) {
|
96
|
* this.name = name;
|
97
|
* }
|
98
|
*
|
99
|
* greet() {
|
100
|
* alert('Hello ' + this.name + '!');
|
101
|
* }
|
102
|
* }
|
103
|
* ```
|
104
|
*
|
105
|
* or equivalent to ES5:
|
106
|
*
|
107
|
* ```
|
108
|
* var Greeter = function (name) {
|
109
|
* this.name = name;
|
110
|
* }
|
111
|
*
|
112
|
* Greeter.prototype.greet = function () {
|
113
|
* alert('Hello ' + this.name + '!');
|
114
|
* }
|
115
|
* ```
|
116
|
*
|
117
|
* ### Example with parameter annotations
|
118
|
*
|
119
|
* ```
|
120
|
* var MyService = ng.Class({
|
121
|
* constructor: [String, [new Optional(), Service], function(name, myService) {
|
122
|
* ...
|
123
|
* }]
|
124
|
* });
|
125
|
* ```
|
126
|
*
|
127
|
* is equivalent to ES6:
|
128
|
*
|
129
|
* ```
|
130
|
* class MyService {
|
131
|
* constructor(name: string, @Optional() myService: Service) {
|
132
|
* ...
|
133
|
* }
|
134
|
* }
|
135
|
* ```
|
136
|
*
|
137
|
* ### Example with inheritance
|
138
|
*
|
139
|
* ```
|
140
|
* var Shape = ng.Class({
|
141
|
* constructor: (color) {
|
142
|
* this.color = color;
|
143
|
* }
|
144
|
* });
|
145
|
*
|
146
|
* var Square = ng.Class({
|
147
|
* extends: Shape,
|
148
|
* constructor: function(color, size) {
|
149
|
* Shape.call(this, color);
|
150
|
* this.size = size;
|
151
|
* }
|
152
|
* });
|
153
|
* ```
|
154
|
* @suppress {globalThis}
|
155
|
* @stable
|
156
|
*/
|
157
|
export declare function Class(clsDef: ClassDefinition): Type<any>;
|
158
|
/**
|
159
|
* @suppress {globalThis}
|
160
|
*/
|
161
|
export declare function makeDecorator(name: string, props?: (...args: any[]) => any, parentClass?: any, chainFn?: (fn: Function) => void): (...args: any[]) => (cls: any) => any;
|
162
|
export declare function makeParamDecorator(name: string, props?: (...args: any[]) => any, parentClass?: any): any;
|
163
|
export declare function makePropDecorator(name: string, props?: (...args: any[]) => any, parentClass?: any): any;
|