无法理解在打字稿项目中存储自定义类型的位置

Ale*_*rov 5 javascript typescript

Typescript 很棒,类型很棒,但对于某些场景来说并不那么容易。

我与打字稿斗争了几天,我不明白在哪里放置需要在整个项目中使用的类型。

我知道这些类型可以包含在*.ts文件中,并且在编译时它们将被删除。但是,如果我type在另一个模块中需要它,那么我需要使用相对路径导入它。但它看起来很难看..如果我将该文件移动到另一个位置,我将破坏一半的项目。

所以我的想法是类型应该独立于它的使用位置。

我读过有关声明合并的内容,看起来这就是我想要的。

我的目标:

我想构建一个库(用于nodejs),它将在另一个打字稿项目和(也许)纯javascript项目中使用。

显然,我的库的输出将是*.js*.d.ts文件。我不想发布*.ts文件,因为我想编译它们一次,并且可以在纯 js 项目中使用它(我不想在那里带打字稿编译器)

一个文件(模块)包含单一功能。该函数有inputoutput。类型inputoutput写入d.ts文件中

declare namespace library.foo {

type main = () => out

type out = {
   name: string
}

}
Run Code Online (Sandbox Code Playgroud)

在声明旁边我放置了带有实现的文件(foo.ts):

createFoo: library.foo.main = () {
return { name: "baz"}
}
Run Code Online (Sandbox Code Playgroud)

运行后,tsc ifoo.d.ts在 dist 文件夹中看到以下输出:

declare const createFoo: library.foo.main
Run Code Online (Sandbox Code Playgroud)

我手写的声明文件留在源文件夹中,而不是在 dist 文件夹中。

tsc 中是否有任何选项可以发出包含我所有类型的单个声明文件?.js该文件将与生成的文件和所有.t.ds文件一起发布