假设我有一个名为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认为我没有默认属性的属性类型,但我很确定我使用命名空间声明......或不?对此错误感到困惑 - 错误/警告似乎不正确。
答案 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;