β¬ οΈ Back to Table of Contents
π builtinSymbolLikes¶
π 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¶
Examples:
<details><summary>Raw JSDoc</summary>
```typescript
/**
* @example
* ```ts
* class DerivedClass extends Promise<number> {}
* DerivedClass.reject
* // ^ PromiseLike
* ```
*/
Calls:
isBuiltinSymbolLike
Code
isPromiseConstructorLike(program: ts.Program, type: ts.Type): boolean¶
Examples:
<details><summary>Raw JSDoc</summary>
```typescript
/**
* @example
* ```ts
* const value = Promise
* value.reject
* // ^ PromiseConstructorLike
* ```
*/
Calls:
isBuiltinSymbolLike
Code
isErrorLike(program: ts.Program, type: ts.Type): boolean¶
Examples:
<details><summary>Raw JSDoc</summary>
```typescript
/**
* @example
* ```ts
* class Foo extends Error {}
* new Foo()
* // ^ ErrorLike
* ```
*/
Calls:
isBuiltinSymbolLike
Code
isReadonlyErrorLike(program: ts.Program, type: ts.Type): boolean¶
Examples:
<details><summary>Raw JSDoc</summary>
```typescript
/**
* @example
* ```ts
* type T = Readonly<Error>
* // ^ ReadonlyErrorLike
* ```
*/
Calls:
isReadonlyTypeLikeisErrorLikeisReadonlyErrorLike
Code
isReadonlyTypeLike(program: ts.Program, type: ts.Type, predicate: ( subType: { aliasSymbol: ts.Symbol; alβ¦): boolean¶
Examples:
<details><summary>Raw JSDoc</summary>
```typescript
/**
* @example
* ```ts
* type T = Readonly<{ foo: 'bar' }>
* // ^ ReadonlyTypeLike
* ```
*/
Calls:
isBuiltinTypeAliasLikesubtype.aliasSymbol.getNamepredicate
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)
);
});
}
isBuiltinTypeAliasLike(program: ts.Program, type: ts.Type, predicate: ( subType: { aliasSymbol: ts.Symbol; alβ¦): boolean¶
Parameters:
programts.Programtypets.Typepredicate( subType: { aliasSymbol: ts.Symbol; aliasTypeArguments: readonly ts.Type[]; } & ts.Type, ) => boolean
Returns: boolean
Calls:
isBuiltinSymbolLikeRecurserisSymbolFromDefaultLibrary (from ./isSymbolFromDefaultLibrary)predicate
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;
});
}
isBuiltinSymbolLike(program: ts.Program, type: ts.Type, symbolName: string | string[]): boolean¶
Parameters:
programts.Programtypets.TypesymbolNamestring | string[]
Returns: boolean
Calls:
isBuiltinSymbolLikeRecursersubType.getSymbolsymbol.getNameArray.isArraysymbolName.someisSymbolFromDefaultLibrary (from ./isSymbolFromDefaultLibrary)
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;
});
}
isBuiltinSymbolLikeRecurser(program: ts.Program, type: ts.Type, predicate: (subType: ts.Type) => boolean | null): boolean¶
Parameters:
programts.Programtypets.Typepredicate(subType: ts.Type) => boolean | null
Returns: boolean
Calls:
type.isIntersectiontype.types.someisBuiltinSymbolLikeRecursertype.isUniontype.types.everytsutils.isTypeParametertype.getConstraintpredicatetype.getSymboltsutils.isSymbolFlagSetprogram.getTypeCheckerchecker.getDeclaredTypeOfSymbolchecker.getBaseTypes
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 &&
tsutils.isSymbolFlagSet(
symbol,
ts.SymbolFlags.Class | ts.SymbolFlags.Interface,
)
) {
const checker = program.getTypeChecker();
const declaredType = checker.getDeclaredTypeOfSymbol(symbol);
for (const baseType of checker.getBaseTypes(
declaredType as ts.InterfaceType,
)) {
if (isBuiltinSymbolLikeRecurser(program, baseType, predicate)) {
return true;
}
}
}
return false;
}
Generated by Syntax Scribe