-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathts-types.ts
123 lines (93 loc) · 2.56 KB
/
ts-types.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
export interface ITsType {
isBasic: boolean
name: string
}
export class TsAnyType implements ITsType {
public get isBasic(): boolean {
return false;
}
public get name(): string {
return "any";
}
}
export class TsArrayType implements ITsType {
private inner: ITsType;
constructor(inner: ITsType) {
this.inner = inner;
}
public get isBasic(): boolean {
return false;
}
public get name(): string {
return this.inner.name + "[]";
}
public getInner(): ITsType {
return this.inner;
}
}
export class TsBasicType implements ITsType {
private inner: ITsType;
private innerName: string;
constructor(name: string) {
this.innerName = name;
}
public get isBasic(): boolean {
return true;
}
public get name(): string {
return this.innerName;
}
}
export const TsBooleanType = new TsBasicType("boolean");
export const TsNumberType = new TsBasicType("number");
export const TsStringType = new TsBasicType("string");
export const TsVoidType = new TsBasicType("void");
export class TsFunctionType implements ITsType {
private retType: ITsType;
private args: Array<{ name: string; type: ITsType }>;
constructor(args: Array<{ name: string; type: ITsType }>, ret: ITsType) {
this.args = args;
this.retType = ret;
}
public get isBasic(): boolean {
return false;
}
public get name(): string {
return "Function";
}
}
export class TsIdentifierType implements ITsType {
private originalName: string;
private typeParameters: Array<ITsType>;
private _name: string;
constructor(name: string, typeParameters?: Array<ITsType>) {
this._name = name;
this.typeParameters = typeParameters;
this.originalName = name;
if (this.originalName.indexOf(".") > -1) {
let splitted = this.originalName.split(".");
this._name = splitted[splitted.length - 1];
}
}
public get isBasic(): boolean {
return false;
}
public get name(): string {
return this._name;
}
public get parameters(): ITsType[] {
return this.typeParameters;
}
}
export class TsUnionType implements ITsType {
private innerTypes: ITsType[];
constructor(innerTypes: ITsType[]) {
this.innerTypes = innerTypes;
}
public get isBasic(): boolean {
return false;
}
public get name(): string {
return this.innerTypes.map(innerType => innerType.name).join(" | ");
}
}