📄 builtinSymbolLikes.ts¶
📊 Analysis Summary¶
| Metric | Count |
|---|---|
| 🔧 Functions | 8 |
| 📦 Imports | 1 |
📚 Table of Contents¶
🛠️ File Location:¶
📂 packages/type-utils/src/builtinSymbolLikes.ts
📦 Imports¶
| Name | Source |
|---|---|
isSymbolFromDefaultLibrary |
./isSymbolFromDefaultLibrary |
Functions¶
isPromiseLike(program: ts.Program, type: ts.Type): boolean¶
Code
-
JSDoc:
-
Parameters:
program: ts.Programtype: ts.Type- Return Type:
boolean - Calls:
isBuiltinSymbolLike
isPromiseConstructorLike(program: ts.Program, type: ts.Type): boolean¶
Code
-
JSDoc:
-
Parameters:
program: ts.Programtype: ts.Type- Return Type:
boolean - Calls:
isBuiltinSymbolLike
isErrorLike(program: ts.Program, type: ts.Type): boolean¶
Code
-
JSDoc:
-
Parameters:
program: ts.Programtype: ts.Type- Return Type:
boolean - Calls:
isBuiltinSymbolLike
isReadonlyErrorLike(program: ts.Program, type: ts.Type): boolean¶
Code
-
JSDoc:
-
Parameters:
program: ts.Programtype: ts.Type- Return Type:
boolean - Calls:
isReadonlyTypeLikeisErrorLikeisReadonlyErrorLike
`isReadonlyTypeLike(program: ts.Program, type: ts.Type, predicate: (¶
subType: {
aliasSymbol: ts.Symbol;
aliasTypeArguments: readonly ts.Type[];
} & ts.Type,
) => boolean): boolean`
Code
export function isReadonlyTypeLike(
program: ts.Program,
type: ts.Type,
predicate?: (
subType: {
aliasSymbol: ts.Symbol;
aliasTypeArguments: readonly ts.Type[];
} & ts.Type,
) => boolean,
): boolean {
return isBuiltinTypeAliasLike(program, type, subtype => {
return (
subtype.aliasSymbol.getName() === 'Readonly' && !!predicate?.(subtype)
);
});
}
-
JSDoc:
-
Parameters:
program: ts.Programtype: ts.Typepredicate: ( subType: { aliasSymbol: ts.Symbol; aliasTypeArguments: readonly ts.Type[]; } & ts.Type, ) => boolean- Return Type:
boolean - Calls:
isBuiltinTypeAliasLikesubtype.aliasSymbol.getNamepredicate
`isBuiltinTypeAliasLike(program: ts.Program, type: ts.Type, predicate: (¶
subType: {
aliasSymbol: ts.Symbol;
aliasTypeArguments: readonly ts.Type[];
} & ts.Type,
) => boolean): boolean`
Code
export function isBuiltinTypeAliasLike(
program: ts.Program,
type: ts.Type,
predicate: (
subType: {
aliasSymbol: ts.Symbol;
aliasTypeArguments: readonly ts.Type[];
} & ts.Type,
) => boolean,
): boolean {
return isBuiltinSymbolLikeRecurser(program, type, subtype => {
const { aliasSymbol, aliasTypeArguments } = subtype;
if (!aliasSymbol || !aliasTypeArguments) {
return false;
}
if (
isSymbolFromDefaultLibrary(program, aliasSymbol) &&
predicate(
subtype as {
aliasSymbol: ts.Symbol;
aliasTypeArguments: readonly ts.Type[];
} & ts.Type,
)
) {
return true;
}
return null;
});
}
- Parameters:
program: ts.Programtype: ts.Typepredicate: ( subType: { aliasSymbol: ts.Symbol; aliasTypeArguments: readonly ts.Type[]; } & ts.Type, ) => boolean- Return Type:
boolean - Calls:
isBuiltinSymbolLikeRecurserisSymbolFromDefaultLibrary (from ./isSymbolFromDefaultLibrary)predicate
isBuiltinSymbolLike(program: ts.Program, type: ts.Type, symbolName: string | string[]): boolean¶
Code
export function isBuiltinSymbolLike(
program: ts.Program,
type: ts.Type,
symbolName: string | string[],
): boolean {
return isBuiltinSymbolLikeRecurser(program, type, subType => {
const symbol = subType.getSymbol();
if (!symbol) {
return false;
}
const actualSymbolName = symbol.getName();
if (
(Array.isArray(symbolName)
? symbolName.some(name => actualSymbolName === name)
: actualSymbolName === symbolName) &&
isSymbolFromDefaultLibrary(program, symbol)
) {
return true;
}
return null;
});
}
- Parameters:
program: ts.Programtype: ts.TypesymbolName: string | string[]- Return Type:
boolean - Calls:
isBuiltinSymbolLikeRecursersubType.getSymbolsymbol.getNameArray.isArraysymbolName.someisSymbolFromDefaultLibrary (from ./isSymbolFromDefaultLibrary)
isBuiltinSymbolLikeRecurser(program: ts.Program, type: ts.Type, predicate: (subType: ts.Type) => boolean | null): boolean¶
Code
export function isBuiltinSymbolLikeRecurser(
program: ts.Program,
type: ts.Type,
predicate: (subType: ts.Type) => boolean | null,
): boolean {
if (type.isIntersection()) {
return type.types.some(t =>
isBuiltinSymbolLikeRecurser(program, t, predicate),
);
}
if (type.isUnion()) {
return type.types.every(t =>
isBuiltinSymbolLikeRecurser(program, t, predicate),
);
}
if (tsutils.isTypeParameter(type)) {
const t = type.getConstraint();
if (t) {
return isBuiltinSymbolLikeRecurser(program, t, predicate);
}
return false;
}
const predicateResult = predicate(type);
if (typeof predicateResult === 'boolean') {
return predicateResult;
}
const symbol = type.getSymbol();
if (
symbol &&
symbol.flags & (ts.SymbolFlags.Class | ts.SymbolFlags.Interface)
) {
const checker = program.getTypeChecker();
for (const baseType of checker.getBaseTypes(type as ts.InterfaceType)) {
if (isBuiltinSymbolLikeRecurser(program, baseType, predicate)) {
return true;
}
}
}
return false;
}
- Parameters:
program: ts.Programtype: ts.Typepredicate: (subType: ts.Type) => boolean | null- Return Type:
boolean - Calls:
type.isIntersectiontype.types.someisBuiltinSymbolLikeRecursertype.isUniontype.types.everytsutils.isTypeParametertype.getConstraintpredicatetype.getSymbolprogram.getTypeCheckerchecker.getBaseTypes