如何在TypeScript中使用对象作为默认导出声明模块

时间:2019-07-21 09:22:14

标签: javascript typescript type-declaration

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

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

module.exports = foo;

因此,现在的问题是如何提出模块声明。首先,很明显,该模块使用default导出,而不是命名导出。此默认导出是具有方法的对象。所以我尝试了这个:

declare module 'foo' {
  export default {
    bar(): number;
  };
}

但是,TypeScript编译器抱怨:

  

在环境中,export语句的表达式必须是标识符或限定名称。

这是什么意思?使用bar,我使用了标识符,不是吗? “在环境中使用合格名称”是什么意思?

1 个答案:

答案 0 :(得分:1)

  

使用栏,我使用了标识符,不是吗?

该错误正在谈论export子句的对象。使用bar作为标识符(特别是作为方法名)时,您没有导出该标识符,而是在导出包含它的对象文字。

declare module 'foo' {
  export default {bar(): number};
}

标识符bar是指导出值而不是导出值本身的方法。

要纠正此问题,请写

declare module 'foo' {
  const foo: {bar(): number};
  export default foo;
}

限定名称是指通过用其a.b

包围范围限定其名称而引用的名称
declare module 'foo' {
  namespace ns {
    const foo: {bar(): number};
  }
  export default ns.foo; 
}