TL; DR :我们要为回购中的多个文件提供一个打字文件
我们有一个内部JavaScript库,我们正在尝试向其中添加类型。此javascript库不会将其文件捆绑在一起,因此它们的导入方式如下:
import someModule from '@org/some/module/path';
import otherModule from '@org/some/module/other';
到目前为止,通过创建类型声明文件(typings.d.ts
)并将其放置在我们的打字稿项目的根目录中,我们已经取得了成功:
typings.d.ts
declare module '@org/some/module/path' {
export default function someModule(): string;
}
declare module '@org/some/module/other' {
export default function otherModule(): string;
}
但是,由于我们对TypeScript的使用越来越认真,因此我们希望将该类型文件移到该库中(而不是在导入该库的仓库中),以便这些类型可以存在于该库的仓库中,并且可以在将来的打字稿项目中重复使用。
我尝试过的是将typings.d.ts
文件移动到内部仓库中,并将密钥"types": "./typings.d.ts"
添加到仓库的package.json中。
发布后,我仍然收到以下错误:
Could not find a declaration file for module '@sift/skipper/components/Loader'
我想念什么吗?有什么想法吗?
答案 0 :(得分:1)
你不走运;如果要在使用该库的每个项目中进行导入而无需进行特殊配置,则需要在每个.d.ts
文件旁边创建一个.js
文件。
根据我的实验,TypeScript加载项目的算法大致如下所示(其他人可以随时做出更正):
files
,include
和exclude
字段以及types
中的tsconfig.json
选项指定的所有源文件。对于每个加载的文件,请遵循<reference>
指令,并尝试使用module resolution来遵循模块导入,但是如果模块解析失败,请不要报告错误。 declare module "foo" { ... }
。(好奇的旁注:这意味着如果第1步中的导入使用全局声明加载了一个非模块文件,则即使该导入最终与模块声明而不是文件相关联,这些全局声明仍然有效!)
以前,您的typings.d.ts
文件已作为原始项目的源文件之一加载。但是现在,什么也没有强制加载库中的typings.d.ts
文件,并且'@sift/skipper/components/Loader'
的模块分辨率正在与.d.ts
文件一起寻找.js
文件,没有一个存在。 types
的{{1}}字段仅在您加载软件包的根目录时才起作用(通过导入或package.json
选项或types
);这不是为包的所有子模块查找类型声明的通用方法。
您的其他选择(按非常规的顺序,从大到小的顺序排列)是将主项目使用<reference types="..."/>
到库的<reference path="..."/>
,将库的typings.d.ts
添加到{{1} }或主项目typings.d.ts
的{{1}}字段,或使用files
和include
强制加载库包的根。