使用TypeScript添加属性以实现功能

时间:2017-04-02 20:51:05

标签: javascript typescript typescript2.2

假设我有一个名为run的函数表达式:

let run = function(){


};

我想在此运行函数中添加一个名为“default”的属性,这是对自身的引用。

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 个答案:

答案 0 :(得分:2)

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

您已将default声明为Run,因此分配给它的任何内容也必须具有default属性。

您可以选择default

default?: Run;

或者可以将其声明为函数:

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

答案 1 :(得分:1)

如果你没有使用保留字(default),你可以这样做:

export function run() {
  // ...
}

export namespace run {
  export const DEFAULT = run;
}

但是对于你似乎想要做的事情,我认为最简单的是:

export function run() {
  // ...
}

export default run;