如何让 Typescript 获取声明文件?
Posted
技术标签:
【中文标题】如何让 Typescript 获取声明文件?【英文标题】:How do I make Typescript pick up a declaration file? 【发布时间】:2019-04-18 19:56:19 【问题描述】:我的文件 src/auth/ManagementAPI.ts
使用 Auth0。我需要使用自己的声明文件并创建了src/@types/auth0.d.ts
。
但是,当我运行 ts-node
时,我收到了这个错误:
TSError: ⨯ Unable to compile TypeScript:
auth/ManagementAPI.ts(1,69): error TS7016: Could not find a declaration file for module 'auth0'. '/Users/danrumney/WebstormProjects/ohana/node_modules/auth0/src/index.js' implicitly has an 'any' type.
Try `npm install @types/auth0` if it exists or add a new declaration (.d.ts) file containing `declare module 'auth0';
我已更新我的 tsconfig.json
文件以包括:
"typeRoots": [
"./node_modules/@types",
"./src/@types"
]
我的声明文件是这样的:
declare module 'auth0'
/*...*/
为什么没有收到这份声明?
我在这里创建了一个示例存储库:https://bitbucket.org/ohanapediatrics/so-demo/src/master/
【问题讨论】:
您有示例 repo 还是可以在 stackblitz 上创建示例? 您的 auth0 声明文件名是auth0.d.ts
在您的 ./src/@types
目录中吗?好的做法是将您的第三方库本地声明文件放在./types
目录中。您甚至不必在配置中添加它,它会自动解析。
更新:错误是当我使用ts-node
,而不是tsc
添加了 git repo:bitbucket.org/ohanapediatrics/so-demo/src/master
【参考方案1】:
对于加载声明文件的typeRoots
机制,需要将其命名为index.d.ts
并放置在typeRoots
选项中列出的目录之一的子目录 中;见documentation。根据您存储库中的typeRoots
设置,您可以将文件放在src/types/auth0/index.d.ts
。
上述方法可行,但由于您的声明文件正在声明一个模块,因此最好设置模块解析来查找您的声明文件,而不是使用主要用于全局声明的typeRoots
。为此,请使用baseUrl
and paths
或为名为@987654332@ 的本地npm 包创建一个package.json
文件,并使用相对路径在您的主package.json
文件中注册该包。
【讨论】:
谢谢!从文档中:> 类型包是一个文件夹,其中包含一个名为 index.d.ts 的文件,或者一个包含 package.json 且具有 types 字段的文件夹。以上是关于如何让 Typescript 获取声明文件?的主要内容,如果未能解决你的问题,请参考以下文章
使用 TypeScript 在节点应用程序中导入 JSON 文件
如何在解析模块时阻止 typescript 2.0 遍历所有父目录?