基本上,我正在尝试通过Firebase云功能将Firebase中已经存在的数据复制到Algolia中。该代码无法编译,我似乎也无法弄清楚为什么。
我使用的是打字稿,而不是javascript,并且正在此处关注此文章。 https://medium.com/@soares.rfarias/how-to-set-up-firestore-and-algolia-319fcf2c0d37 我也在VScode中工作
//这是我文件的顶部 const algoliasearch = require('algoliasearch')
const algoliaClient =
algoliasearch(functions.config().algolia.appid,
functions.config().algolia.apikey)
export const sendCollectionToAlgolia =
functions.https.onRequest(async (req, res) =>
{
const collectionIndex = algoliaClient.initIndex('Organizations')
const db = admin.firestore()
const algoliaRecords = []
const querySnapshot = await db.collection("Organizations").get()
querySnapshot.docs.forEach(doc => {
const document = doc.data()
const record = {
objectID: doc.id,
"orgUsername": document.orgUsername,
"orgName": document.orgName,
"school": document.school
}
algoliaRecords.push(record)
})
collectionIndex.saveObjects(algoliaRecords, (_error: any, content:
any) => {
res.status(200).send("COLLECTION was indexed to Algolia
successfully.");
})
})
我一直收到表示“变量'algoliaRecords'在某些无法确定其类型的位置隐式具有类型'any []'”的编译错误,并且我不知道如何解决它。我对阿尔及利亚比较陌生,但是已经开始使用云功能了。
答案 0 :(得分:0)
发生这种情况是因为algoriaRecords
没有显式类型。通常,TypeScript将根据您最终分配的内容来推断类型。但是,随后的每个algoriaRecords.push()
操作都会根据添加到变量中的元素来扩展变量的类型。
对此的快速解决方案是通过为algoriaRecords明确指定类型,例如:
const algoriaRecords:Object[] = []
此外,您可以通过配置tsconfig.js文件并将noImplicitAny设置为false,同时删除严格的规则
,使TypeScript允许不声明任何类型的params,有关更多信息,请参见here。// "strict": true
"noImplicitAny" : false