【问题标题】:How do I make Typescript pick up a declaration file?如何让 Typescript 获取声明文件?
【发布时间】: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

标签: typescript ts-node


【解决方案1】:

对于加载声明文件的typeRoots 机制,需要将其命名为index.d.ts 并放置在typeRoots 选项中列出的目录之一的子目录 中;见documentation。根据您存储库中的typeRoots 设置,您可以将文件放在src/types/auth0/index.d.ts。

上述方法可行,但由于您的声明文件正在声明一个模块,因此最好设置模块解析来查找您的声明文件,而不是使用主要用于全局声明的typeRoots。为此,请使用baseUrl and paths 或为名为@9​​87654332@ 的本地npm 包创建一个package.json 文件,并使用相对路径在您的主package.json 文件中注册该包。

【讨论】:

  • 谢谢!从文档中:> 类型包是一个文件夹,其中包含一个名为 index.d.ts 的文件,或者一个包含 package.json 且具有 types 字段的文件夹。
猜你喜欢
  • 2021-03-25
  • 1970-01-01
  • 2012-12-31
  • 2012-10-25
  • 2016-09-27
  • 2018-05-12
  • 2018-06-14
  • 2020-12-24
  • 1970-01-01
相关资源
最近更新 更多