/
util.ts
41 lines (29 loc) · 1.1 KB
/
util.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
/**
* @license Use of this source code is governed by an MIT-style license that
* can be found in the LICENSE file at https://github.com/cartant/rxjs-tslint-rules
*/
import * as Lint from "tslint";
import * as ts from "typescript";
export function couldBeType(type: ts.Type, name: string): boolean {
if (isReferenceType(type)) {
type = type.target;
}
if (isType(type, name)) {
return true;
}
if (isUnionType(type)) {
return type.types.some((t) => couldBeType(t, name));
}
const baseTypes = type.getBaseTypes();
return Boolean(baseTypes) && baseTypes.some((t) => couldBeType(t, name));
}
export function isReferenceType(type: ts.Type): type is ts.TypeReference {
return Lint.isTypeFlagSet(type, ts.TypeFlags.Object) &&
Lint.isObjectFlagSet(type as ts.ObjectType, ts.ObjectFlags.Reference);
}
export function isType(type: ts.Type, name: string): boolean {
return Boolean(type.symbol) && type.symbol.name === name;
}
export function isUnionType(type: ts.Type): type is ts.UnionType {
return Lint.isTypeFlagSet(type, ts.TypeFlags.Union);
}