我正在为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。
答案 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);