UNPKG

@mistlog/typetype

Version:

A programming language designed for typescript type generation

90 lines (89 loc) 3.27 kB
import { IBasicType, ITypeReference, IIdentifier, IArrayType, ITupleType } from "../basic"; import { ITypeForInStatement, ITypeIfStatement } from "../statement"; import { IFunctionType } from "../function"; export declare type ITypeExpression = IBasicType | ITypeReference | ITypeCallExpression | IInferType | IConditionalTypeExpression | IMappedTypeExpression | IUnionType | IIntersectionType | IOperatorType | IIndexType | IFunctionType | IParenthesizedType | IContextType; export declare function TypeExpression(): JSX.Element; export interface IParenthesizedType { kind: "ParenthesizedType"; param: ITypeExpression; } export declare function ParenthesizedType(): JSX.Element; export interface ITypeArrowFunctionExpression { kind: "TypeArrowFunctionExpression"; params: IParamList; body: IConditionalTypeExpression; } /** * TODO: add more expressions? use block statement? */ export declare function TypeArrowFunctionExpression(): JSX.Element; export interface IConditionalTypeExpression { kind: "ConditionalTypeExpression"; body: ITypeIfStatement; } export declare function ConditionalTypeExpression(): JSX.Element; export interface ITypeCallExpression { kind: "TypeCallExpression"; callee: ITypeReference; params: IParamList; } export declare function TypeCallExpression(): JSX.Element; export declare type ITypeExpressionList = ITypeExpression[]; export declare function TypeExpressionList(): JSX.Element; export declare type ITypeExpressionParam = ITypeExpression & { constraint?: ITypeExpression; default?: ITypeExpression; }; export declare type IParamList = ITypeExpressionParam[]; export declare function ParamList(): JSX.Element; export interface IInferType { kind: "InferType"; typeName: IIdentifier; } export declare function InferType(): JSX.Element; export interface IUnionType { kind: "UnionType"; types: ITypeExpression[]; } export declare function UnionType(): JSX.Element; export interface IIntersectionType { kind: "IntersectionType"; types: ITypeExpression[]; } export declare function IntersectionType(): JSX.Element; export declare type IOperatorType = IKeyOfType | IReadonlyArray | IReadonlyTuple; export declare function OperatorType(): JSX.Element; export interface IReadonlyTuple { kind: "ReadonlyTuple"; operand: ITupleType; } export declare function ReadonlyTuple(): JSX.Element; export interface IReadonlyArray { kind: "ReadonlyArray"; operand: IArrayType; } export declare function ReadonlyArray(): JSX.Element; export interface IKeyOfType { kind: "KeyOfType"; operand: ITypeExpression; } export declare function KeyOfType(): JSX.Element; export interface IIndexType { kind: "IndexType"; head: ITypeExpression; members: ITypeExpression[]; } export declare function IndexType(): JSX.Element; export interface IMappedTypeExpression { kind: "MappedTypeExpression"; body: ITypeForInStatement; } export declare function MappedTypeExpression(): JSX.Element; export interface IContextType { kind: "ContextType"; body: { context: string; source: string; }; } export declare function ContextType(): JSX.Element;