升级到 Angular 9 后,在typings 文件中找不到变量

jaz*_*000 12 angular angular9

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

打字.d.ts

declare var LogglyTracker;
Run Code Online (Sandbox Code Playgroud)

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

src/app/error/loggly.service.ts:13:29 中的错误 - 错误 TS2304:找不到名称“LogglyTracker”。

有谁知道解决这个问题的推荐方法是什么?这段代码在 Angular 8 中运行良好。

@Injectable()
export class LogglyLoggerService {

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

Cur*_*rse 12

Angular 7迁移到Angular 9后遇到了同样的问题。

我个人只需要在tsconfig.app.json.

之前

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

之后

{
    "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
    ]
}
Run Code Online (Sandbox Code Playgroud)

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

{
    ...
    "compilerOptions": {
        ...
        "typeRoots": [
            "node_modules/@types",
            "src/typings.d.ts"
        ],
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)


jaz*_*000 0

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

/// <reference path="../../typings.d.ts" />
Run Code Online (Sandbox Code Playgroud)

引用显然是将类型定义导入代码的另一种方法,更多信息请参见此处

  • 这应该没有必要。如果您有很多此类文件,则无法维护。必须有另一种解决方案。 (2认同)