export type MarkovInputData = {
    string: string;
}[];
export type MarkovGenerateOptions = {
    maxTries?: number;
    prng?: () => number;
    filter?: (result: MarkovResult) => boolean;
};
/**
 * Data to build the Markov instance
 */
export type MarkovConstructorOptions = {
    stateSize?: number;
};
/**
 * While `stateSize` is optional as a constructor parameter,
 * it must exist as a member
 */
export type MarkovDataMembers = {
    stateSize: number;
};
export type MarkovResult = {
    string: string;
    score: number;
    refs: MarkovInputData;
    tries: number;
};
export type MarkovFragment = {
    words: string;
    refs: MarkovInputData;
};
export type Corpus = {
    [key: string]: MarkovFragment[];
};
export type MarkovImportExport = {
    corpus: Corpus;
    startWords: MarkovFragment[];
    endWords: MarkovFragment[];
    options: MarkovDataMembers;
};
export default class Markov {
    data: MarkovInputData;
    options: MarkovDataMembers;
    startWords: MarkovFragment[];
    endWords: MarkovFragment[];
    corpus: Corpus;
    private defaultOptions;
    /**
     * Creates an instance of Markov generator.
     *
     * @param {MarkovConstructorOptions} [options={}]
     * @memberof Markov
     */
    constructor(options?: MarkovConstructorOptions);
    /**
     * Imports a corpus. This overwrites existing data.
     *
     * @param data
     */
    import(data: MarkovImportExport): void;
    /**
     * Exports structed data used to generate sentence.
     */
    export(): MarkovImportExport;
    addData(rawData: MarkovInputData | string[]): void;
    /**
     * Builds the corpus. You must call this before generating sentences.
     *
     * @memberof Markov
     */
    private buildCorpus;
    /**
     * Generates a result, that contains a string and its references
     *
     * @param {MarkovGenerateOptions} [options={}]
     * @returns {MarkovResult}
     * @memberof Markov
     */
    generate(options?: MarkovGenerateOptions): MarkovResult;
}
