@mistlog/typetype
Version:
A programming language designed for typescript type generation
90 lines (89 loc) • 3.27 kB
TypeScript
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;