SharePoint React pnpjs

时间:2018-12-12 09:49:05

标签: reactjs typescript sharepoint sharepoint-online sp.js

我正在为SharePoint框架进行React项目。
我的问题或多或少是一个普遍的问题。

我遇到了一个我不理解的问题:
我试图将sp.search与匹配SearchQuery接口的对象一起使用,但是在扩展react.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);
    });
}

如您所见,这只是一个基本的搜索功能。如果我在不扩展react.component的类中使用sp.search,或者如果我不使用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 :(得分:0)

显然,这些错误是由于将<T>用于泛型类型参数声明并结合JSX语法而造成的限制而发生的,请参考this issue以获得更多详细信息(标记为{{3 }})

要避免此错误,请创建SearchQuery的实例:

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

,然后将其传递给sp.search方法:

let result = await sp.search(searchQuery);