[英]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.