在 `d.ts` 文件中使用 `export` 有意义吗?

Does it make sense to use `export` within a `d.ts` file?

我正在尝试为我的应用程序全局使用的类型创建一个文件。

reduxState.d.ts

declare namespace MyProject {
  type Type1 = someType;
  interface SomeInterface {
    someProperty: someType
  }
}

使用上面的代码,我已经可以在我的项目文件中看到我的 namespace 及其成员。

那么上面的代码和下面使用 export 作为 namespace 成员的代码有什么区别?

declare namespace MyProject {
  export type Type1 = someType;
  export interface SomeInterface {
    someProperty: someType
  }
}

它们似乎都工作得很好。有什么区别?

发件人:https://www.typescriptlang.org/docs/handbook/namespaces.html#namespacing

Because we want the interfaces and classes here to be visible outside the namespace, we preface them with export.

在 DOC 的这段摘录中,他们似乎指的是在 ts 而不是 d.ts 文件中声明的 namespace。这就是为什么在这种情况下需要 export 吗?

d.ts 文件中使用 export 是否有意义?

*.d.ts 个文件用于定义,它们在 run-time 处被完全忽略。如果你编写 JS 代码是因为你有一个库或其他东西,我强烈建议使用 export 关键字,因为这使得其他用户更容易看到他们可以从你的代码中使用什么(你没有的东西出口,显然不能在其他地方进口)。

现在您的 use-case:从命名空间导出的所有内容都可以在外部独立使用。这意味着你可以做类似

的事情
const obj: MyProject.SomeInterface = { someProperty: 20 };

由于您使用的是 *.d.ts 文件而不是 *.ts 文件,因此只要您只导出接口,对您来说就没有任何区别,因为它们会在 compile-time 无论如何。

最后一点:*.d.ts 文件使您可以在整个项目中看到您的内容,但如果您计划从那里导入函数或类似函数,显然您需要先导入它们。