Пользовательский виджет углового мгновенного поиска - Свойство "уточнение" не существует для типа "объект"
Я создал собственный виджет для окна поиска в своем приложении Angular, и он отлично работает в режиме разработки. В тот момент, когда я собираю проект (ng build --prod), я получаю следующую ошибку:
Свойство "уточнение" не существует для типа "объект".
CustomWidget.ts
import { Component, Inject, forwardRef, OnInit } from '@angular/core';
import { BaseWidget, NgAisInstantSearch, } from 'angular-instantsearch';
import { connectSearchBox } from 'instantsearch.js/es/connectors';
@Component({
selector: 'app-search-box',
templateUrl: './search-box.component.html',
styleUrls: ['./search-box.component.css']
})
export class SearchBoxComponent extends BaseWidget {
constructor(
@Inject(forwardRef(() => NgAisInstantSearch))
public instantSearchParent
) {
super('SearchBox');
}
public ngOnInit() {
this.createWidget(connectSearchBox);
super.ngOnInit();
}
}
CustomWidget..html
<div class="relative p-4 px-8">
<input type="search" (input)="state.refine($event.target.value)">
</div>
Примечание. При импорте connectSearchBox сразу после. При наведении появляется следующее сообщение:
[ts] Не удалось найти файл объявления для модуля "instantsearch.js/es/connectors". "/node_modules/instantsearch.js/es/connectors/index.js" неявно имеет тип "любой".
При просмотре модулей узлов есть InstantSearch.js/es/connectors, за которыми следуют дополнительные папки для каждого типа компонентов, например "search-box"
BaseWidget.d.ts
import { OnDestroy, OnInit } from '@angular/core';
export declare class Widget {
init: () => void;
getConfiguration: () => object;
render: (params: {
templatesConfig: object;
state: object;
results: {}[];
createURL: (value: any) => string;
instantSearchInstance: object;
}) => void;
dispose: (params: {
helper: object;
state: object;
}) => object | void;
}
export declare type Connector = (renderFn: (state: object, isFirstRendering: boolean) => void, unmountFn: () => void) => (widgetOptions?: object) => Widget;
export declare class BaseWidget implements OnInit, OnDestroy {
instantSearchParent: any;
autoHideContainer?: boolean;
widget?: Widget;
state?: object;
cx: Function;
constructor(widgetName: string);
createWidget(connector: Connector, options?: object): void;
ngOnInit(): void;
ngOnDestroy(): void;
updateState: (state: {}, isFirstRendering: boolean) => void | Promise<void>;
getItemClass(item: {
isRefined?: boolean;
}): any;
}
1 ответ
Решено. Ужасно с моей стороны, я пропустил раздел документации здесь:
https://community.algolia.com/angular-instantsearch/guides/customize-widgets.html - раздел № 3. Визуализация от государства
Следующее необходимо добавить в пользовательский виджет.
state: {
refine: (value: string) => void;
}