typescript - 如何导出现有 Typescript 声明模块的内部成员

标签 typescript

假设我有一个声明文件,它描述了导出具有多个成员的对象的节点模块的形状。此文件存在于 foo/index.d.ts 中,看起来像:

interface Foo {
  bar: () => void;
  // ... more members here
}


declare var Foo: Foo;
export = Foo;

有了这个,我可以在编译时正常要求和使用模块:

import * as Foo from 'foo';
Foo.bar();

但是,我现在也希望能够做到这一点:

import * as bar from 'foo/bar';
bar();

我已经尝试了声明文件路径、模块、 namespace 和上下文的所有可能组合,但我无法使它正常工作。最明显、最直观的方法是在 foo/bar/index.d.ts 中创建一个文件:

import * as Foo from '..';
export = Foo.bar;

但这样做会导致错误:'Foo' 仅引用一个类型,但在这里被用作命名空间。

如何创建定义导出外部和内部成员的模块的声明文件?

编辑:尝试按照@cevek 的建议使用declare module,但这会引发错误“找不到 namespace Foo”:

declare module "foo/bar" {
  var bar: Foo.bar;
  export = bar;
}

最佳答案

你可以使用模块声明

//foo.d.ts
    interface Foo {}
    interface Bar {}

    declare module 'foo' {
        export default Foo
    }

    declare module 'foo/bar'{
        export default Bar
    }

从另一个地方使用它

import * as Foo from 'foo';
import * as Bar from 'foo/bar';

关于typescript - 如何导出现有 Typescript 声明模块的内部成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41593298/

相关文章:

java - 删除行后如何保证连续数字字段的列?

angular - localStorage 未定义(Angular Universal)

javascript - 使用React Typescript CRA设置 Electron

javascript - rxjs-tslint 与 rxjs-tslint-rules 包

arrays - 无法在 TypeScript 中使用 forEach 更改 boolean 数组值

typescript - 如何使用 TypeORM 在 NestJS 中实现分页

javascript - 如何动态选择一个对象来添加属性 - js

javascript - 由于函数执行顺序而导致重定向不起作用

typescript : 'RegExpMatchArray' 类型的参数不可分配给 'string' 类型的参数

javascript - 优化大型 TypeScript 文件的编译