首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeScript从其他项目中为普通TS文件和全局范围声明绝对导入

TypeScript从其他项目中为普通TS文件和全局范围声明绝对导入
EN

Stack Overflow用户
提问于 2020-03-06 08:41:36
回答 1查看 1.4K关注 0票数 2

我正在评估一个迁移到TypeScript的JavaEE环境中的大型代码库。有多个具有深度目录结构和JavaScript代码的项目,它们在项目中使用全局变量等。

TypeScript有多项目支持,这个小GitHub上的实例就说明了这一点。然而,我的案件更复杂。

(1) JS代码被放置在项目的深处,例如"Project1/src/main/resources/de/mycompany/webapp/ts".生成的JS代码应该放在"Project1/src/main/resources/de/mycompany/webapp/ts-generated".中。TypeScript为此提供了rootDiroutDir

(2)文件夹结构很复杂,这就是为什么相对导入不是一种选择。例如,从核心项目引用文件应该总是相同的--无论是从ui项目还是从ui-utils项目。TypeScript为绝对引用提供了"baseUrl“和”路径“。然而,这似乎不适用于多项目设置(或者我做错了什么)。例如,我想要import * from '@core/utils/mycode.ts'。此引用应该相对于核心项目的baseUrl或rootDir进行解释。

(3)我必须引用全局范围内现有的JS代码。为此,TypeScript提供声明文件(.d.ts),可用于向编译器提供额外的类型信息。因此,我计划为现有的JS代码创建声明文件。然后,必须通过使用TypeScript项目来导入声明。但是,TypeScript中的import关键字似乎总是将声明作为带有命名空间的模块导入,这与JS对象绑定到全局范围这一事实相矛盾。我还找到了三重进口,它似乎适用于相对引用,但不适用于对其他项目的绝对引用。

问题

对于(2):是否有可能有绝对导入跨项目,最好是从baseUrl或rootDir?

对于(3):是否可以从全局范围内JS代码的其他项目导入(或引用) TypeScript声明。请注意,这不应该生成任何代码,它应该只告诉编译器现有的代码。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-13 16:03:08

关于(3)

为了包含全局范围类型声明(.d.ts文件),TypeScript在tsconfig.json:"typeRoots" : ["./typings"]中提供了"typeRoots“数组。请注意,这些文件也必须从“包含”数组("include": ["./typings/*.ts"])中的路径中获得。

这是因为"typeRoots“和"include”中的路径也可以指向当前项目之外的目录。

关于(2)

对TypeScript编译器的一次调用似乎不可能做到这一点。然而,在按依赖关系顺序逐个编译项目时,这是可能的。

因此,我假设已经编译了一个没有依赖项的项目P1。现在的目标是编译项目P2,它使用来自P1的代码。对于以下示例,假定P1的“P1”为“构建”:

  • 通过P1的“Include”数组将来自P1的“P1”中的所有ts文件包括在内。
    • "include": ["../P1/build/*.ts"]
    • 这将使来自P1的编译后的P1文件在P2中可用,这样TypeScript编译器就可以了解来自P1的代码。

  • 通过outDir的“路径”数组向P1的“路径”添加一个路径别名。
    • "paths": { "@P1/*": ["../P1/build/*"] }
    • 这将使绝对进口发挥作用。

这是因为“路径”和“包含”数组中的路径可以指向当前项目之外的目录。

请注意,此解决方案没有使用TypeScript的TypeScript特性。请进一步注意,不需要typeRoots,除非您希望为普通JS代码提供类型信息。否则,类型信息应该已经在P1的“P1”中找到。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60560327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档