SharePoint React pnpjs - PullRequest
       9

SharePoint React pnpjs

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

Я работаю над проектом реагирования для среды SharePoint.
У меня вопрос более или менее общий.

Я столкнулся с определенной проблемой, которую не понимаю:
Iпытался использовать sp.search с объектом, совпадающим с интерфейсом SearchQuery, но сделал это в расширяющем классе response.component

код:

public search(query: string, properties: Array<string>, rowLimit: number): Promise<SearchResults> {
    return new Promise<SearchResults>(async (resolve) => {
        let result = await sp.search(<SearchQuery>{
            Querytext: query,
            SelectProperties: properties,
            RowLimit: rowLimit
        });
        resolve(result);
    });
}

Как видите, это всего лишьОсновная функция поиска.Если я использую sp.search в классе, который не расширяет response.component, или если я не использую экземпляр searchquery, но простая строка запроса, все работает нормально.

Кажется, что это ошибка типа, ночестно говоря, я не понимаю, что происходит.
Ошибка:

[ts]Argument of type 'Element' is not assignable to parameter of type 'SearchQueryInit'. Type 'Element' is not assignable to type 'ISearchQueryBuilder'.
Property 'query' is missing in type 'Element'. [2345]

[ts] JSX element 'SearchQuery' has no corresponding closing tag. [17008]
[ts] 'SearchQuery' only refers to a type, but is being used as a value here. [2693]

Поэтому я решил просто написать сервис, использующий pnpjs, и это совершенно нормально, тем более что я не планировал использовать pnpjsв компоненте это должно было быть немного быстрее и иметь что-то для тестирования и работы.но тем не менее, я действительно хотел бы понять, что происходит.Кстати, я использую TypeScript, если это интересно.

1 Ответ

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

Очевидно, что эти ошибки возникают из-за ограничения, связанного с использованием <T> для объявлений параметров универсального типа в сочетании с грамматикой JSX, для получения более подробной информации см. эту проблему (которая помечена как Design Limitation)

Чтобы обойти эту ошибку, создайте экземпляр SearchQuery:

const searchQuery: SearchQuery = {
    Querytext: query,
    SelectProperties: properties,
    RowLimit: rowLimit
};

и затем передайте его в метод sp.search:

let result = await sp.search(searchQuery);
...