添加 属性 以使用 TypeScript 运行

Adding property to function with TypeScript

假设我有一个名为 运行:

的函数表达式
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;

但我收到此警告:

有谁知道为什么会出现该错误消息?

如您所见,TS 认为我没有默认 属性 的 属性 类型,但我很确定我使用了命名空间声明……或者没有?被这个错误弄糊涂了 - error/warning 似乎不正确。

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

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

您可以将 default 设为可选:

default?: Run;

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

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

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

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

export namespace run {
  export const DEFAULT = run;
}

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

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

export default run;