type ElementType> = T extends ArrayLike ? E : never; /** * Abstracts some generic operations that have different implementations depending * on whether we operate on strings or array of things. **/ interface TrieableTrait>> { empty(): T; append(base: T, appendage: ElementType): T; slice(base: T, start: number, end: number): T; } export declare class Trie>> { #private; constructor(traitImpl: TrieableTrait); static newStringTrie(): Trie; static newArrayTrie>>(): Trie>>; add(word: T): void; remove(word: T): boolean; has(word: T): boolean; words(prefix?: T): T[]; private dfs; longestPrefix(word: T, fullWordOnly: boolean): T; clear(): void; } export {};