3

假设我有一个名为 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;

但我收到这个警告:

在此处输入图像描述

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

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

4

2 回答 2

2

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

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

您可以default选择:

default?: Run;

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

default: (paths: Array<string>, opts: run.IOpts, cb: Function) => void;
于 2017-04-02T22:20:38.803 回答
1

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

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

export namespace run {
  export const DEFAULT = run;
}

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

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

export default run;
于 2018-06-03T12:11:31.217 回答