我有这段代码,它给我一个错误的打字稿。
firebaseAdmin.firestore().collection('arenas').get()
.then((snapshot: any) => {
snapshot.forEach((element: any) => {
scraptIt(firebaseFunctions.config().sports.url + element.data().url, {
sports: {
listItem: '.LSport',
data: ['b']
}
}).then((data: any) => {
sportsArray.push(data)
sportsArray = [...new Set(data)]
}).catch((err: any) => { res.send(err); console.log(err) })
})
}).catch((err: any) => { res.send(err); console.log(err) })
我收到以下错误
类型的参数' {sports:{listItem:string; data:string []; }; }'不能分配给' ScrapeOptions'类型的参数。物业'体育'与索引签名不兼容。输入' {listItem:string; data:string []; }'不能分配类型'字符串| ScrapeOptionList | ScrapeOptionElement&#39 ;.输入' {listItem:string; data:string []; }'没有与' ScrapeOptionElement'。
类型相同的属性
我正在使用此套餐:Scrape-It
答案 0 :(得分:3)
您正在使用Scrapeit库中的以下方法签名
declare function scrapeIt<T>(url: string | object, opts:scrapeIt.ScrapeOptions): Promise<T>;
表示方法scraptIt()
的第二个参数应为ScrapeOptions
类型。如果仔细观察接口ScrapeOptions
的定义,可以看到它接受以下格式作为输入
export interface ScrapeOptions {
[key: string]: string | ScrapeOptionList | ScrapeOptionElement;
}
ScrapeOptionList
接口定义为
export interface ScrapeOptionList {
listItem: string;
data: ScrapeOptions;
}
在您的代码中,您传递的第二个参数如下所示
scraptIt(firebaseFunctions.config().sports.url + element.data().url, {
sports: {
listItem: '.LSport',
data: ['b'] // here is the issue
}
})
根据定义,data
的值应为ScrapeOptions
类型。因此,您需要将其更改为简单字符串或ScrapeOptionList
类型或ScrapeOptionElement
类型。
您可以根据需要尝试将其更改为data: 'b'
或者将data
属性值设置为ScrapeOptionList
或ScrapeOptionElement
的类型。
要使用的示例格式应如下所示 - (不确定为什么使用data:['b']
)。在我看来,它应该是data : { "somekey" : 'b'}
pages: {
listItem: "li.page"
, name: "pages"
, data: {
title: "a"
, url: {
selector: "a"
, attr: "href"
}
}
}