Виджет включает в себя декларации типов, которые должны работать из коробки
import type { Options, Suggestion, SuggestionsType } from "@dadata/suggestions";
const options: Options = {};
Объект подсказки - это опциональный generic, по умолчанию типизирован без детализации объекта в поле data:
type AnyData = { [K: string]: any };
interface Suggestion<T = AnyData> {
value: string;
unrestricted_value: string;
data: T;
}
Передать собственный тип для подсказок можно при инициализации виджета, и этот тип будет распространен на все объекты подсказок в коллбэках и методах этого экземпляра.
interface AddressSuggestion {
postal_code: string | null;
kladr_id: string | null;
...
history_values: string[] | null;
}
const input = document.getElementById("address") as HTMLInputElement;
const suggestions = createSuggestions<AddressSuggestion>(input, {
type: "address",
onSelect(suggestion) { // suggestion is Suggestion<AddressSuggestion>
console.log(suggestion);
}
});
suggestions.getSuggestions(); // вернет Suggestion<AddressSuggestion>[]
При изменении опций виджета можно передать новый тип, если нужно на лету изменить тип подсказок:
const suggestions = createSuggestions<AddressSuggestion>(input, options);
suggestions.setOptions<NameSuggestion>({
type: "name",
onSelect(suggestion) {
// suggestion is Suggestion<NameSuggestion>
console.log(suggestion);
},
});
Методы getSelection, getSuggestions и getOptions - тоже позволяют изменить тип подсказки в возвращаемом значении:
const suggestions = createSuggestions<AddressSuggestion>(input, options); suggestions.getSelection<NameSuggestion>(); // Suggestion<NameSuggestion> suggestions.getSuggestions<EmailSuggestion>(); // Suggestion<EmailSuggestion>[] suggestions.getOptions<PartySuggestion>(); // Options<PartySuggestion>
Обзор
Инструменты контента