in src/type_translator.ts [76:140]
export function typeToDebugString(type: ts.Type): string {
let debugString = `flags:0x${type.flags.toString(16)}`;
if (type.aliasSymbol) {
debugString += ` alias:${symbolToDebugString(type.aliasSymbol)}`;
}
if (type.aliasTypeArguments) {
debugString += ` aliasArgs:<${
type.aliasTypeArguments.map(typeToDebugString).join(',')}>`;
}
// Just the unique flags (powers of two). Declared in src/compiler/types.ts.
const basicTypes: ts.TypeFlags[] = [
ts.TypeFlags.Any, ts.TypeFlags.String,
ts.TypeFlags.Number, ts.TypeFlags.Boolean,
ts.TypeFlags.Enum, ts.TypeFlags.StringLiteral,
ts.TypeFlags.NumberLiteral, ts.TypeFlags.BooleanLiteral,
ts.TypeFlags.EnumLiteral, ts.TypeFlags.BigIntLiteral,
ts.TypeFlags.ESSymbol, ts.TypeFlags.UniqueESSymbol,
ts.TypeFlags.Void, ts.TypeFlags.Undefined,
ts.TypeFlags.Null, ts.TypeFlags.Never,
ts.TypeFlags.TypeParameter, ts.TypeFlags.Object,
ts.TypeFlags.Union, ts.TypeFlags.Intersection,
ts.TypeFlags.Index, ts.TypeFlags.IndexedAccess,
ts.TypeFlags.Conditional, ts.TypeFlags.Substitution,
];
for (const flag of basicTypes) {
if ((type.flags & flag) !== 0) {
debugString += ` ${ts.TypeFlags[flag]}`;
}
}
if (type.flags === ts.TypeFlags.Object) {
const objType = type as ts.ObjectType;
debugString += ` objectFlags:0x${objType.objectFlags.toString(16)}`;
// Just the unique flags (powers of two). Declared in src/compiler/types.ts.
const objectFlags: ts.ObjectFlags[] = [
ts.ObjectFlags.Class,
ts.ObjectFlags.Interface,
ts.ObjectFlags.Reference,
ts.ObjectFlags.Tuple,
ts.ObjectFlags.Anonymous,
ts.ObjectFlags.Mapped,
ts.ObjectFlags.Instantiated,
ts.ObjectFlags.ObjectLiteral,
ts.ObjectFlags.EvolvingArray,
ts.ObjectFlags.ObjectLiteralPatternWithComputedProperties,
];
for (const flag of objectFlags) {
if ((objType.objectFlags & flag) !== 0) {
debugString += ` object:${ts.ObjectFlags[flag]}`;
}
}
}
if (type.symbol && type.symbol.name !== '__type') {
debugString += ` symbol.name:${JSON.stringify(type.symbol.name)}`;
}
if (type.pattern) {
debugString += ` destructuring:true`;
}
return `{type ${debugString}}`;
}