Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用TypeScript向函数添加属性_Javascript_Typescript_Typescript2.2 - Fatal编程技术网

Javascript 使用TypeScript向函数添加属性

Javascript 使用TypeScript向函数添加属性,javascript,typescript,typescript2.2,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: Funct

假设我有一个名为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;
名称空间运行{
导出接口运行{
(路径:数组,选项:run.IOpts,cb:Function):void
默认值:Run;
}
导出接口IOpts{
babelExec?:字符串,
全部?:布尔值
}
}
const run:run.run=function(路径:数组,选项:run.IOpts,cb:function):void{
//....
}
run.default=run;
导出=运行;
但我得到这个警告:

有人知道为什么会出现这个错误消息吗


正如您所看到的,TS认为我没有默认属性的属性类型,但我非常确定我使用了名称空间声明…还是没有?被这个错误弄糊涂了-错误/警告似乎不正确。

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

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

您可以将
设置为默认值
可选:

default?: Run;
或者可以将其声明为函数:

default: (paths: Array<string>, opts: run.IOpts, cb: Function) => void;
default:(路径:数组,选项:run.IOpts,cb:Function)=>void;

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

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

export namespace run {
  export const DEFAULT = run;
}
但对于你似乎想做的事情,我认为最简单的是:

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

export default run;

嗯,谢谢,但是我代码中的默认属性应该指向具有默认属性的run函数,它指向具有默认属性的run函数。这只是一个循环引用,不确定我所拥有的有什么问题,但也许这个解决方案会奏效,谢谢!我认为您所说的是,默认属性在声明之后才附加到run函数……这一定是问题所在。这个解决方案似乎有效,谢谢。是的,你找到了。