ts-simple-type
Version:
Relationship type checker functions for Typescript types.
276 lines (275 loc) • 11.2 kB
TypeScript
export declare enum SimpleTypeKind {
STRING_LITERAL = "STRING_LITERAL",
NUMBER_LITERAL = "NUMBER_LITERAL",
BOOLEAN_LITERAL = "BOOLEAN_LITERAL",
BIG_INT_LITERAL = "BIG_INT_LITERAL",
STRING = "STRING",
NUMBER = "NUMBER",
BOOLEAN = "BOOLEAN",
BIG_INT = "BIG_INT",
NULL = "NULL",
UNDEFINED = "UNDEFINED",
ANY = "ANY",
UNKNOWN = "UNKNOWN",
VOID = "VOID",
UNION = "UNION",
ENUM = "ENUM",
ENUM_MEMBER = "ENUM_MEMBER",
INTERSECTION = "INTERSECTION",
TUPLE = "TUPLE",
INTERFACE = "INTERFACE",
OBJECT = "OBJECT",
FUNCTION = "FUNCTION",
METHOD = "METHOD",
CLASS = "CLASS",
CIRCULAR_TYPE_REF = "CIRCULAR_TYPE_REF",
GENERIC_ARGUMENTS = "GENERIC_ARGUMENTS",
GENERIC_PARAMETER = "GENERIC_PARAMETER",
ALIAS = "ALIAS",
DATE = "DATE",
ARRAY = "ARRAY",
PROMISE = "PROMISE"
}
export declare enum SimpleTypeModifierKind {
EXPORT = "EXPORT",
AMBIENT = "AMBIENT",
PUBLIC = "PUBLIC",
PRIVATE = "PRIVATE",
PROTECTED = "PROTECTED",
STATIC = "STATIC",
READONLY = "READONLY",
ABSTRACT = "ABSTRACT",
ASYNC = "ASYNC",
DEFAULT = "DEFAULT"
}
export interface SimpleTypeBase {
kind: SimpleTypeKind;
name?: string;
}
export interface SimpleTypeMember {
optional: boolean;
type: SimpleType;
}
export interface SimpleTypeMemberNamed extends SimpleTypeMember {
name: string;
}
export interface SimpleTypeClassMember extends SimpleTypeMemberNamed {
modifiers: SimpleTypeModifierKind[];
}
export interface SimpleTypeAlias extends SimpleTypeBase {
kind: SimpleTypeKind.ALIAS;
name: string;
target: SimpleType;
typeParameters?: SimpleTypeGenericParameter[];
}
export interface SimpleTypeDate extends SimpleTypeBase {
kind: SimpleTypeKind.DATE;
}
export interface SimpleTypeClass extends SimpleTypeBase {
kind: SimpleTypeKind.CLASS;
ctor?: SimpleTypeFunction;
typeParameters?: SimpleTypeGenericParameter[];
properties: SimpleTypeClassMember[];
methods: SimpleTypeClassMember[];
}
export interface SimpleTypeFunctionArgument {
name: string;
type: SimpleType;
optional: boolean;
spread: boolean;
initializer: boolean;
}
export interface SimpleTypeFunction extends SimpleTypeBase {
kind: SimpleTypeKind.FUNCTION;
argTypes: SimpleTypeFunctionArgument[];
typeParameters?: SimpleTypeGenericParameter[];
returnType: SimpleType;
}
export interface SimpleTypeMethod extends SimpleTypeBase {
kind: SimpleTypeKind.METHOD;
argTypes: SimpleTypeFunctionArgument[];
typeParameters?: SimpleTypeGenericParameter[];
returnType: SimpleType;
}
export interface SimpleTypeInterface extends SimpleTypeBase {
kind: SimpleTypeKind.INTERFACE;
members?: SimpleTypeMemberNamed[];
}
export interface SimpleTypeGenericArguments extends SimpleTypeBase {
kind: SimpleTypeKind.GENERIC_ARGUMENTS;
name?: undefined;
target: SimpleType;
typeArguments: SimpleType[];
}
export interface SimpleTypeGenericParameter extends SimpleTypeBase {
name: string;
kind: SimpleTypeKind.GENERIC_PARAMETER;
default?: SimpleType;
}
export interface SimpleTypeObject extends SimpleTypeBase {
kind: SimpleTypeKind.OBJECT;
members?: SimpleTypeMemberNamed[];
}
export interface SimpleTypeTuple extends SimpleTypeBase {
kind: SimpleTypeKind.TUPLE;
members: SimpleTypeMember[];
}
export interface SimpleTypeArray extends SimpleTypeBase {
kind: SimpleTypeKind.ARRAY;
type: SimpleType;
}
export interface SimpleTypePromise extends SimpleTypeBase {
kind: SimpleTypeKind.PROMISE;
type: SimpleType;
}
export interface SimpleTypeEnumMember extends SimpleTypeBase {
kind: SimpleTypeKind.ENUM_MEMBER;
fullName: string;
name: string;
type: SimpleTypePrimitive;
}
export interface SimpleTypeEnum extends SimpleTypeBase {
name: string;
kind: SimpleTypeKind.ENUM;
types: SimpleTypeEnumMember[];
}
export interface SimpleTypeUnion extends SimpleTypeBase {
kind: SimpleTypeKind.UNION;
types: SimpleType[];
}
export interface SimpleTypeIntersection extends SimpleTypeBase {
kind: SimpleTypeKind.INTERSECTION;
types: SimpleType[];
}
export interface SimpleTypeBigIntLiteral extends SimpleTypeBase {
kind: SimpleTypeKind.BIG_INT_LITERAL;
value: bigint;
}
export interface SimpleTypeStringLiteral extends SimpleTypeBase {
kind: SimpleTypeKind.STRING_LITERAL;
value: string;
}
export interface SimpleTypeNumberLiteral extends SimpleTypeBase {
kind: SimpleTypeKind.NUMBER_LITERAL;
value: number;
}
export interface SimpleTypeBooleanLiteral extends SimpleTypeBase {
kind: SimpleTypeKind.BOOLEAN_LITERAL;
value: boolean;
}
export interface SimpleTypeString extends SimpleTypeBase {
kind: SimpleTypeKind.STRING;
}
export interface SimpleTypeNumber extends SimpleTypeBase {
kind: SimpleTypeKind.NUMBER;
}
export interface SimpleTypeBoolean extends SimpleTypeBase {
kind: SimpleTypeKind.BOOLEAN;
}
export interface SimpleTypeBigInt extends SimpleTypeBase {
kind: SimpleTypeKind.BIG_INT;
}
export interface SimpleTypeNull extends SimpleTypeBase {
kind: SimpleTypeKind.NULL;
}
export interface SimpleTypeUndefined extends SimpleTypeBase {
kind: SimpleTypeKind.UNDEFINED;
}
export interface SimpleTypeAny extends SimpleTypeBase {
kind: SimpleTypeKind.ANY;
}
export interface SimpleTypeUnknown extends SimpleTypeBase {
kind: SimpleTypeKind.UNKNOWN;
}
export interface SimpleTypeVoid extends SimpleTypeBase {
kind: SimpleTypeKind.VOID;
}
export interface SimpleTyoeCircularRef extends SimpleTypeBase {
kind: SimpleTypeKind.CIRCULAR_TYPE_REF;
ref: SimpleType;
}
export declare type SimpleType = SimpleTypeBigIntLiteral | SimpleTypeEnumMember | SimpleTypeEnum | SimpleTyoeCircularRef | SimpleTypeClass | SimpleTypeFunction | SimpleTypeObject | SimpleTypeInterface | SimpleTypeTuple | SimpleTypeArray | SimpleTypeUnion | SimpleTypeIntersection | SimpleTypeStringLiteral | SimpleTypeNumberLiteral | SimpleTypeBooleanLiteral | SimpleTypeString | SimpleTypeNumber | SimpleTypeBoolean | SimpleTypeBigInt | SimpleTypeNull | SimpleTypeUndefined | SimpleTypeAny | SimpleTypeMethod | SimpleTypeVoid | SimpleTypePromise | SimpleTypeUnknown | SimpleTypeAlias | SimpleTypeDate | SimpleTypeGenericArguments | SimpleTypeGenericParameter;
export declare function isSimpleType(type: any): type is SimpleType;
export declare type SimpleTypeLiteral = SimpleTypeBigIntLiteral | SimpleTypeBooleanLiteral | SimpleTypeStringLiteral | SimpleTypeNumberLiteral;
export declare const LITERAL_TYPE_KINDS: SimpleTypeKind[];
export declare function isSimpleTypeLiteral(type: SimpleType): type is SimpleTypeLiteral;
export declare type SimpleTypePrimitive = SimpleTypeLiteral | SimpleTypeString | SimpleTypeNumber | SimpleTypeBoolean | SimpleTypeBigInt | SimpleTypeNull | SimpleTypeUndefined;
export declare const PRIMITIVE_TYPE_KINDS: SimpleTypeKind[];
export declare function isSimpleTypePrimitive(type: SimpleType): type is SimpleTypePrimitive;
export declare const PRIMITIVE_TYPE_TO_LITERAL_MAP: Record<SimpleTypeKind, SimpleTypeKind | undefined>;
export declare const IMPLICIT_GENERIC: SimpleTypeKind[];
export declare function isImplicitGenericType(type: SimpleType): type is SimpleTypeArray | SimpleTypeTuple | SimpleTypePromise;
export declare function setTypescriptModule(newModule: typeof import("typescript")): void;
import { BigIntLiteralType, Declaration, GenericType, LiteralType, Node, ObjectType, Symbol, TupleType, Type, TypeReference, UniqueESSymbolType } from "typescript";
import { TypeChecker } from "typescript";
/**
* Converts a Typescript type to a "SimpleType"
* @param type The type to convert.
* @param checker
* @param cache
*/
export declare function toSimpleType(type: Node, checker: TypeChecker, cache?: WeakMap<Type, SimpleType>): SimpleType;
export declare function toSimpleType(type: Type, checker: TypeChecker, cache?: WeakMap<Type, SimpleType>): SimpleType;
export interface ToSimpleTypeOptions {
circularCache: WeakMap<Type, SimpleType>;
cache: WeakMap<Type, SimpleType>;
checker: TypeChecker;
}
export interface AssignableToSimpleTypeKindOptions {
op?: "and" | "or";
matchAny?: boolean;
}
/**
* Checks if a simple type kind is assignable to a type.
* @param type The type to check
* @param kind The simple type kind to check
* @param kind The simple type kind to check
* @param checker TypeCHecker if type is a typescript type
* @param options Options
*/
export declare function isAssignableToSimpleTypeKind(type: SimpleType, kind: SimpleTypeKind | SimpleTypeKind[], options?: AssignableToSimpleTypeKindOptions): boolean;
export declare function isAssignableToSimpleTypeKind(type: Type, kind: SimpleTypeKind | SimpleTypeKind[], checker: TypeChecker, options?: AssignableToSimpleTypeKindOptions): boolean;
export declare function isAssignableToSimpleTypeKind(type: Type | SimpleType, kind: SimpleTypeKind | SimpleTypeKind[], checker: TypeChecker, options?: AssignableToSimpleTypeKindOptions): boolean;
/**
* Tests a type is assignable to a primitive type.
* @param type The type to test.
* @param checker TypeChecker if type is a typescript type.
*/
export declare function isAssignableToPrimitiveType(type: SimpleType): boolean;
export declare function isAssignableToPrimitiveType(type: Type, checker: TypeChecker): boolean;
export declare function isAssignableToPrimitiveType(type: Type | SimpleType, checker: TypeChecker): boolean;
/**
* Test if typeB is assignable to type B.
* Tests if "typeA = typeB" in strict mode.
* @param typeA Type A
* @param typeB Type B
* @param checker TypeChecker
*/
export declare function isAssignableToType(typeA: SimpleType, typeB: SimpleType): boolean;
export declare function isAssignableToType(typeA: SimpleType | Type | Node, typeB: SimpleType, checker: TypeChecker): boolean;
export declare function isAssignableToType(typeA: SimpleType, typeB: SimpleType | Type | Node, checker: TypeChecker): boolean;
export declare function isAssignableToType(typeA: Type | Node, typeB: Type | Node, checker: TypeChecker): boolean;
export declare function isAssignableToType(typeA: Type | Node | SimpleType, typeB: Type | Node | SimpleType, checker: TypeChecker): boolean;
/**
* Tests if a type is assignable to a value.
* Tests "type = value" in strict mode.
* @param type The type to test.
* @param value The value to test.
*/
export declare function isAssignableToValue(type: SimpleType, value: any): boolean;
export declare function isAssignableToValue(type: Type, value: any, checker: TypeChecker): boolean;
export declare function isAssignableToValue(type: SimpleType | Type, value: any, checker: TypeChecker): boolean;
export interface SimpleTypeToStringOptions {
}
/**
* Converts a simple type to a string.
* @param type Simple Type
*/
export declare function simpleTypeToString(type: SimpleType): string;
/**
* Returns a string representation of a given type.
* @param simpleType
*/
export declare function toTypeString(simpleType: SimpleType): string;
export declare function toTypeString(type: SimpleType | Type, checker: TypeChecker): string;
//# sourceMappingURL=index.cjs.d.ts.map