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_Type Declaration - Fatal编程技术网

Javascript 如何在TypeScript中声明以对象作为默认导出的模块

Javascript 如何在TypeScript中声明以对象作为默认导出的模块,javascript,typescript,type-declaration,Javascript,Typescript,Type Declaration,在TypeScript项目中,我希望使用不提供类型定义的第三方库。所以我需要提出我自己的模块声明。模块基本上导出的内容如下所示: const foo = { bar () { return 23; } }; module.exports = foo; 所以,现在的问题是如何提出模块声明。首先,很明显,模块使用默认导出,而不是命名导出。此默认导出是一个对象,其中包含方法。所以我试了一下: declare module 'foo' { export default {

在TypeScript项目中,我希望使用不提供类型定义的第三方库。所以我需要提出我自己的模块声明。模块基本上导出的内容如下所示:

const foo = {
  bar () {
    return 23;
  }
};

module.exports = foo;
所以,现在的问题是如何提出模块声明。首先,很明显,模块使用默认导出,而不是命名导出。此默认导出是一个对象,其中包含方法。所以我试了一下:

declare module 'foo' {
  export default {
    bar(): number;
  };
}
但是,TypeScript编译器抱怨:

export语句的表达式必须是环境上下文中的标识符或限定名

这是什么意思?使用bar,我使用了一个标识符,不是吗?环境上下文中的限定名称是什么意思

使用bar,我使用了一个标识符,不是吗

错误是关于export子句的对象。虽然您使用了bar作为标识符,特别是作为方法名,但您并没有导出该标识符,而是导出包含该标识符的对象文字

标识符栏指的是导出值的方法,而不是导出值本身

要更正此问题,请编写

declare module 'foo' {
  const foo: {bar(): number};
  export default foo;
}
限定名称是通过限定其名称及其封闭范围(如A.b中所示)来引用的名称


谢谢你的回答,但不幸的是,我没有真正理解这句话:[…]指的是一种输出值的方法,而不是输出值本身。你能解释一下吗?我试着详细解释一下。基本上,bar是方法名,但是您导出的是默认的{bar}而不是默认的bar。可能您混淆了导出{name}包含名称的导出列表和导出默认名称,这相当于导出{name as default}
declare module 'foo' {
  const foo: {bar(): number};
  export default foo;
}
declare module 'foo' {
  namespace ns {
    const foo: {bar(): number};
  }
  export default ns.foo; 
}