export interface IToken { type: string; len?: number; raw?: string; children?: IToken[]; value?: string; args?: string[]; } export type TNullableToken = T | undefined | null; export type TChildrenToken = TNullableToken | T[]; export type TTokenizer = IParser> = (parser: P, value: string) => TNullableToken; export interface IParser { parse(value: string): T[]; }