【问题标题】:d.ts interface augmentations being recognized by IDE but not by TSCd.ts 接口增强被 IDE 识别但不被 TSC 识别
【发布时间】:2015-11-02 07:32:03
【问题描述】:

我在 webstorm 中使用 ES6 样式的模块包含,我有一个 express 应用程序,它有一个自定义的 d.ts(用于改变对象的中间件),看起来像这样:

declare module Express {
    export interface Application {
        getLogger(): LoggerInstance;
        getRepository(collectionName): IRepository;
        getEnvironmentVars(): any;
    }
}

现在 IDE 看到了这个,每当我使用它时都没有错误,但是当我通过 TSC 运行它时,它会显示'getRepository' does not exist on type 'Application'

我有很多其他 d.ts 文件都可以正常工作,但没有列出任何错误,也没有什么奇怪的地方。

这方面的一个示例用例可能是:

import { Express } from "express"

export function SomeMiddleWare(app: Express){...};

(express.d.ts 中的 Express 扩展了包含其他文件中的扩充的应用程序。)

所以我很困惑为什么它可以在 IDE 中工作,但不能在 TSC 中工作,TSC 包括一个类型目录中的所有 *.d.ts 文件,没有与 d.ts 文件一起列出的错误只是使用此特定 d.ts 中定义的用法。

【问题讨论】:

  • 你使用什么参数/配置来运行 tsc?
  • 它正在通过 gulp-typescript 运行,并且正在传递源文件和输入文件。我知道这与用于其他 5 个遵循相同约定的项目的构建脚本完全相同(src 用于源文件的文件夹,typing 用于类型文件的文件夹),它包括所有子目录和所有源中的所有 ts d.ts 文件位于 typings 文件夹的子目录中。此外,我还有 3 个其他自定义 d.ts 文件,它们扩展了 mongodb 和其他库,它们都被正确使用,并且与没有行为的 d.ts 文件位于同一文件夹中。

标签: express typescript


【解决方案1】:

TSC 说“应用程序”类型上不存在“getRepository”

使用tsconfig.json 之类的东西确保这个新的.d.ts 包含在tsc 的编译上下文中

【讨论】:

  • 经过几个小时的尝试不同的事情后,实际问题似乎与它无法导入 IRepository 类型有关,但静默失败,然后忽略其余的 d.ts,如果我将所有内容都设置为返回类型any,一切正常。
猜你喜欢
  • 2021-11-22
  • 2022-01-06
  • 2012-02-28
  • 2021-01-13
  • 1970-01-01
  • 1970-01-01
  • 2016-08-17
  • 2010-11-01
  • 1970-01-01
相关资源
最近更新 更多