类型参数不可分配给
Posted
技术标签:
【中文标题】类型参数不可分配给【英文标题】:Argument of type not assignable to 【发布时间】:2018-06-29 14:51:03 【问题描述】:我有这段代码,它给我一个打字稿错误。
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;数据:字符串[]; ; ' 不可分配给“ScrapeOptions”类型的参数。属性“sports”与索引签名不兼容。键入'列表项:字符串;数据:字符串[]; ' 不可分配给类型 'string | ScrapeOptionList |刮擦选项元素'。键入'列表项:字符串;数据:字符串[]; ' 与类型 'ScrapeOptionElement' 没有共同的属性。
我正在使用这个包:Scrape-It
【问题讨论】:
【参考方案1】:您正在使用 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
property 值设置为ScrapeOptionList
或ScrapeOptionElement
类型。
要使用的示例格式应如下所示——(不确定您为什么使用data:['b']
)。在我看来应该是data : "somekey" : 'b'
pages:
listItem: "li.page"
, name: "pages"
, data:
title: "a"
, url:
selector: "a"
, attr: "href"
【讨论】:
啊,好的,我去看看。这很奇怪,因为我在两个不同的项目和 VS 代码编辑器中有完全相同的代码,只是一个在给出问题,另一个在工作。我认为这可能是 TS Config 或其他东西,因此也会对此进行调查。 我已经尝试了你的建议,但由于某种原因它仍然给我同样的问题。 @DivanvanBiljon 那么这可能是您的本地 tsconfig 问题.. 根据文档,上述实现似乎是正确的。 @DivanvanBiljon 用示例格式更新了我的答案......你为什么要使用data:['b']
for?data 应该是一个内部带有键值对的对象。
@Nilandri 你是对的,我使用的选择器不正确。以上是关于类型参数不可分配给的主要内容,如果未能解决你的问题,请参考以下文章
构建:'string | 类型的参数1' 不可分配给“字符串”类型的参数
构建:'string | 类型的参数1' 不可分配给“字符串”类型的参数