Пользовательский виджет углового мгновенного поиска - Свойство «уточнение» не существует для типа «объект» - PullRequest
0 голосов
/ 04 декабря 2018

Я создал собственный виджет для окна поиска в своем приложении 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, есть 3 крошечные точки сразу после.При наведении указывается следующее сообщение:

[ts] Не удалось найти файл объявления для модуля instantsearch.js / es / connectors./node_modules/instantsearch.js/es/connectors/index.js неявно имеет тип anyдля каждого типа компонента по внешнему виду, например, '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 Ответ

0 голосов
/ 04 декабря 2018

Решено.Ужасно с моей стороны, я пропустил раздел документации здесь:

https://community.algolia.com/angular-instantsearch/guides/customize-widgets.html - Раздел № 3.Рендеринг из состояния

Следующее необходимо добавить в пользовательский виджет.

state: {
   refine: (value: string) => void;
}
...