在过去的几天里,我一直在尝试为我在npm上找到的一个简单库创建一个.d.ts,用于一个角度4项目(creating typescript .d.ts for third-party library)。我能够创建这样一个声明文件,我认为我的另一个问题是将声明文件移动到更合适的目录,这将非常简单。
在处理原始问题时,我只是在<root>/node_modules/@types
下创建了.d.ts声明文件以及我下载但未创建的类型转换文件。我这样做是因为很明显我将声明文件放在另一个目录中的尝试不起作用,这似乎是次要问题。一旦我解决了主要问题,我就解决了次要问题。我找不到任何添加位置来搜索声明文件的内容。我在tsconfig.json
中找到了一个听起来很有希望的设置,
"typeRoots": [
"node_modules/@types",
"hmm/@types"
],
这里有一个实验值,但是这个值并没有像它应该做的那样听起来。实际上,我可以删除列表中的所有值,但不会获得任何不同的行为,包括其他类型库。 (我后来发现它只用于解析/// <reference=...
指令的目录。)
经过大量的实验和对tsc
代码的一些扫描,我偶然发现,如果包含额外的typescript声明文件的目录包含node_modules/@types
。 tsc会找到它们并将它们视为声明文件。除了<root>/npm_modules/@types
我创建了<root>/src/npm_modules/@types
,一切都按预期工作。我对目录名称不满意所以我尝试了<root>/src/@types/npm_modules/@types
,但是失败了。
我的所有构建都是通过angular-cli ng
,所以ng
可能秘密创建它使用的配置文件而不是我看到的配置文件,但我不认为是这种情况
有没有办法为tsc配置其他类型声明文件,或者让tsc识别某些目录? tsconfig.json上有一个“types”参数,但这似乎意味着只使用 那些类型文件,我想使用一些类型文件另外。理想情况下,我认为我想要一个类似于<root>/@types/library-package-name
的目录结构。这可能吗?
答案 0 :(得分:0)
经过一些研究和反思之后,我认为将环境声明文件放到第三方库只能通过将文件放在名为“node_modules / @ types / somewhere”的目录中来完成,该目录不在第三方的目录中正在使用-party库,或者使用其中一个父目录。如果使用angular 5示例,组件SimpleComponent(在src / app / simple / simple.component.ts中)导入了库'chi-squared-test' ,环境声明文件,chi-squared-test / index.d.ts,可放入:node_modules/@types/chi-squared-test/index.d.ts(已安装的),在src / node_modules中/@types/chi-squared-test/index.d.ts,src/app/node_modules/@types/chi-squared-test/index.d.ts或src / app / simple / node_modules / @ types / chi-squared-test / index.d.ts。我已经验证了src / node_modules / @ types的工作原理。documentation from typescript here说其他人也应该工作,但我还没有测试过。
我看过一些帖子,告诉我一个人应该能够通过使用“typeRoots”配置值将声明文件放在包含“node_modules / @ types”的目录中但是我从来没有能够让它工作。此时,我知道添加环境类型声明文件(.d.ts)的唯一方法是将它们放在名为“node_modules / @ types”的子目录中,从包含需要声明的文件到项目根目录的路径
这可能需要您的.gitignore文件。默认情况下,我认为它忽略了路径中包含“node_modules”的子目录。在大多数情况下,我希望您将私有库声明提交给git,因此您必须调整.gitignore以包含这些目录(像“!src / node_modules”这样的行应该有效)。