不能分配给

时间:2018-01-20 13:35:44

标签: javascript node.js typescript firebase firebase-realtime-database

我有这段代码,它给我一个错误的打字稿。

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

1 个答案:

答案 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属性值设置为ScrapeOptionListScrapeOptionElement的类型。

要使用的示例格式应如下所示 - (不确定为什么使用data:['b'])。在我看来,它应该是data : { "somekey" : 'b'}

pages: {
        listItem: "li.page"
      , name: "pages"
      , data: {
            title: "a"
          , url: {
                selector: "a"
              , attr: "href"
            }
        }
    }