簡體   English   中英

數組類型缺少索引簽名 <string> 使用TypeScript

[英]Missing index signature in type Array<string> with TypeScript

我看到TypeScript錯誤:

在此處輸入圖片說明

代碼本身看起來像這樣:

let fn =  function (transformPaths: Array<string>, cb: Function) {

    async.mapLimit(transformPaths, 5, function (t: string, $cb: Function) {

         // ....

    }, cb);

};

錯誤消息是:

TS2345:類型'string []'的參數不能分配給類型'Dictionary <{}>'的參數。 類型'string []'中缺少索引簽名。

我該如何糾正? 從屏幕快照中可以看到,異步庫中的鍵入不喜歡將純字符串數組作為第一個參數傳遞給async.mapLimit,但是為什么呢?

我99%肯定需要在字符串數組中添加索引簽名,但是該怎么做?

這是“編譯”的東西,但我不知道它是否正確(這似乎並沒有幫助任何人):

export interface ISumanTransformPaths extends Array<string> {
  [index:string]: Object
}

現在,當我使用(transformPaths: ISumanTransformPaths) ,它將進行編譯,但是我不確定是否正確。

此方法簽名為

mapLimit<T, R, E>(arr: T[] | IterableIterator<T>, limit: number, iterator: AsyncResultIterator<T, R, E>, callback?: AsyncResultArrayCallback<R, E>): void;
mapLimit<T, R, E>(arr: Dictionary<T>, limit: number, iterator: AsyncResultIterator<T, R, E>, callback?: AsyncResultArrayCallback<R, E>): void;

因此它可以與Dictionary或array / IterableIterator
我不確定為什么編譯器會推斷第二個簽名而不是第一個簽名,但是也許是因為您傳遞的callback應該是第四個參數,而第三個需要是迭代器。

感謝Nitzan確認@types/async可能是正確的。 這樣就解決了問題:

之前:

 let fn = function (transformPaths: Array<string>, cb: Function) {

    async.mapLimit(transformPaths, 5, function (t: string, cb: Function){

     // problem...does not compile

    }, cb);
 } 

之后:(仔細看,只有一個變化)

  let fn = function (transformPaths: Array<string>, cb: AsyncResultArrayCallback<Error,Array<any>>) {

        async.mapLimit(transformPaths, 5, function (t: string, cb: Function) {

        // now it compiles!

        }, cb);

   };

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM