import Autocomplete from "@trevoreyre/autocomplete-js" interface AutocompleteResult { url: string name: string distance: number } const form = document.getElementById("autocomplete-form")! as HTMLFormElement form.addEventListener("submit", function (e) { e.preventDefault() }) new Autocomplete('#autocomplete', { search: input => { const url = `/search/autocomplete/?q=${encodeURI(input)}` return new Promise(resolve => { if (input.length === 0) { return resolve([]) } fetch(url) .then(response => response.json()) .then((data: AutocompleteResult[]) => { resolve(data) }) }) }, getResultValue: (result: AutocompleteResult) => result.name, onSubmit: (result: AutocompleteResult) => { if (!result) { form.submit() return } location.href = result.url } })