SharePoint 反应 pnpjs

SharePoint React pnpjs

我正在为 SharePoint 框架开发一个 React 项目。
我的问题比较笼统。

我遇到了一个我不明白的问题:
我尝试将 sp.search 与匹配 SearchQuery 接口的对象一起使用,但在扩展 react.component

的 class 中执行此操作

代码:

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 的 class 中使用 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。

显然,这些错误的发生是由于使用 <T> 泛型参数声明与 JSX 语法相结合造成的限制,请参阅 this issue for a more details (which is marked as a Design Limitation)

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

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

然后传给sp.search方法:

let result = await sp.search(searchQuery);