0

我正在尝试在 async.d.ts 中创建以下内容:

interface AsyncIteratorCallback {
    (err?: string): void;
}
interface AsyncEachIterator<T>{ (item: T, callback: AsyncIteratorCallback): void;}

declare module "async" {


    // Collections
    function each<T>(arr: T[], iterator: AsyncEachIterator<T>, callback: AsyncIteratorCallback): void;
}

但我不允许犯错?AsyncIteratorCallback 中的可选?

当我使用它时:

async.each([],(item,cb) => {},(err) => {});

我明白了Call signatures of types '(err: string) => void' and '"async".AsyncIteratorCallback' are incompatible:

4

1 回答 1

0

更新:

我在 Visual Studio 2012 中试过这段代码

interface test {
    (err:string):void
}

var a = (err: string) => { };
var b = (param: test) => { };
b(a);

有用。显然函数 a 实现了接口测试。然后我将此代码更改为:

interface test {
    (err?:string):void
}

var a = (err: string) => { }; 
var b = (param: test) => { };
b(a);  // error, incompatible call signatures

现在该函数没有实现接口。解决方案是添加一个?函数参数也是如此。此代码再次起作用:

interface test {
    (err?:string):void
}

var a = (err?: string) => { }; 
var b = (param: test) => { };
b(a);  // error, incompatible call signatures

最后我尝试了以下方法:

interface test {
    (err:string):void
}

var a = (err: string) => { };
var b = (param: test) => { };
b({ method:a });  // error, no overload of call

我已经对接口定义感到好奇,因为我从未见过一个接口带有一个没有名称的方法。似乎一个对象无法实现这个接口。即使这段代码也不起作用:

b({ call: a });

解决方案

你应该只添加?到你的 lambda。(err?)=>{}

于 2013-06-23T21:04:15.667 回答