升级到 Angular 9 后无法在类型文件中找到变量

After upgrade to Angular 9 cannot find variable in typings file

我有一个外部日志记录组件的引用(在 js 文件中引用),我在类型文件中定义了它

typings.d.ts

declare var LogglyTracker;

我已将我的 angular 应用程序从版本 8 升级到版本 9,现在当我 运行 ng build 时,出现以下错误

ERROR in src/app/error/loggly.service.ts:13:29 - error TS2304: Cannot find name 'LogglyTracker'.

有谁知道解决此问题的推荐方法是什么?此代码在 Angular 8.

中运行良好
@Injectable()
export class LogglyLoggerService {

// https://github.com/loggly/loggly-jslogger
private loggly: any = new LogglyTracker(); //!! Error here
}

我的解决方案是将以下内容添加到服务文件的顶部:

/// <reference path="../../typings.d.ts" />

reference 显然是另一种将类型定义导入代码的方法,更多信息 here

我遇到了与作者完全相同的问题 - 升级到 Angular 9 后,不再找到我的本地类型定义。

在Angular8中,我在tsconfig.json

中添加了对它们的引用
"typeRoots": [
    "node_modules/@types",
    "../src/typings/my-lib/index.d.ts"
    "node_modules/@types"
  ]

升级到 Angular 9 后,my-lib 已找不到。 我使用 Angular 9 CLI 生成了一个新应用程序,发现 2 个文件驻留在不同的位置:

  • src/tsconfig.app.json -> tsconfig.app.json
  • src/tsconfig.spec.json -> tsconfig.spec.json

我在迁移的项目中进行了类似的更改,在 angular.json 中更新了对这些文件的引用,并在 tsconfig.app.jsontsconfig.spec.json

中更正了指向其他文件的指针

因此,我的 tsconfig.app.json 看起来像:

{
  "extends": "./tsconfig.json",
  "compilerOptions": {
    "outDir": "./out-tsc/app",
    "types": ["jest"]
  },
  "files": [
    "src/main.ts",
    "src/polyfills.ts"
  ],
  "include": [
    "src/**/*.d.ts"
  ]
}

请注意,src 目录下的所有 d.ts 文件将被自动拉入(不需要在 tsconfig.jsontypeRoots 部分中引用)

Angular 7 迁移到 Angular 9.[=15= 后出现同样的问题]

我个人只需要在 tsconfig.app.json 中添加一行。

之前:

{
    "extends": "../tsconfig.json",
    "compilerOptions": {
        "outDir": "../out-tsc/app",
        "types": [
            "node"
        ]
    },
    "files": [
        "main.ts",
        "polyfills.ts"
    ],
    "include": [
        "src/**/*.d.ts"
    ]
}

之后:

{
    "extends": "../tsconfig.json",
    "compilerOptions": {
        "outDir": "../out-tsc/app",
        "types": [
            "node"
        ]
    },
    "files": [
        "main.ts",
        "polyfills.ts"
    ],
    "include": [
        "src/**/*.d.ts",
        "typings.d.ts" // add this line
    ]
}

我假设您在迁移到 Angular 9 之前已经在 tsconfig.json 中进行了更改。如果没有,这里是:

{
    ...
    "compilerOptions": {
        ...
        "typeRoots": [
            "node_modules/@types",
            "src/typings.d.ts"
        ],
        ...
    }
}

在Angular9中添加到文件tsconfig.app.json(因为它驻留在src文件夹中,所以*.d.tsapp文件夹下):

  "include": [
      "app/**/*.d.ts"
  ]

只需在 tsconfig.app.json 中添加 typings.d.ts 对我有用,不要忘记在保存文件后重新提供您的应用程序。

"include": [
"src/**/*.d.ts",
"typings.d.ts"
]

Angular v.9