【问题标题】:node.js and typescript definition file for async.jsasync.js 的 node.js 和 typescript 定义文件
【发布时间】:2013-06-20 03:42:36
【问题描述】:

我正在尝试在 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) =&gt; void' and '"async".AsyncIteratorCallback' are incompatible:

【问题讨论】:

    标签: node.js asynchronous typescript


    【解决方案1】:

    更新:

    我在 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?)=&gt;{}

    【讨论】:

    • 它不是一个空对象,它是一个 lambda。函数 ano(item,cb) { }.
    • 你说得对,我玩过 VisualStudio 并更新了我的答案
    猜你喜欢
    • 2016-02-26
    • 2014-04-26
    • 1970-01-01
    • 1970-01-01
    • 2016-02-18
    • 2012-11-16
    • 2016-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多