2017-04-02 53 views
2
功能

说我有一个函数的表达式中调用运行:添加属性与打字稿

let run = function(){ 


}; 

我想一个名为“默认”的属性添加到这个运行功能,对自身的引用。

run.default = run; 

这是为了支持JS中的多个模块导出格式。

我听说最好的方法是使用命名空间。

这里是我的实际代码:

namespace run { 

    export interface Run { 
    (paths: Array<string>, opts: run.IOpts, cb: Function): void 
    default: Run; 
    } 

    export interface IOpts { 
    babelExec?: string, 
    all?: boolean 
    } 
} 


    const run : run.Run = function (paths: Array<string>, opts: run.IOpts, cb: Function): void { 

    //.... 

    } 


run.default = run; 
export = run; 

,但我得到这样的警告:

enter image description here

有谁知道这是为什么出现错误信息?正如你所看到的,TS认为我没有默认属性的属性类型,但我很确定我使用了名称空间声明......还是不是?所以这个错误困惑 - 错误/警告似乎不正确。

回答

2

错误生效是因为您分配给default的功能没有default属性 - 它只是一个函数。

您已宣布defaultRun,因此分配给它的任何内容也必须具有default属性。

你既可以使default可选:

default?: Run; 

或者可以宣布它作为一个功能:

default: (paths: Array<string>, opts: run.IOpts, cb: Function) => void; 
+0

嗯,谢谢你,但在我的代码的默认属性应指向运行函数有一个默认属性,它指向一个具有默认属性的运行函数。这只是一个循环引用,不知道我有什么问题,但也许这个解决方案将工作,谢谢! –

+1

我想你所说的是,默认属性没有附加到运行函数,直到声明之后......这一定是问题所在。此解决方案似乎工作,谢谢。 –

+1

是的,你知道了。 – cartant