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

14
我有一个指向外部日志记录组件(在js文件中引用)的引用,我已经在typings文件中定义了它。
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
}
5个回答

15

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"
    ]
}

之后:

{
    "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"
        ],
        ...
    }
}

4

我和作者碰到了完全一样的问题——在升级到Angular 9之后,我的本地类型定义不再被找到。

在Angular 8中,我将它们的引用添加到了tsconfig.json文件中。

"typeRoots": [
    "node_modules/@types",
    "../src/typings/my-lib/index.d.ts"
    "node_modules/@types"
  ]


升级到Angular 9后,my-lib无法找到。我使用Angular 9 CLI生成了一个新的应用程序,并发现两个文件位于不同的位置:
  • 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 部分中没有必要引用)。

0

只需将typings.d.ts添加到tsconfig.app.json中,然后保存文件后不要忘记重新启动应用程序。

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

Angular v.9


0
在Angular 9中,将以下内容添加到文件tsconfig.app.json中(因为它位于src文件夹中,所以*.d.ts文件位于app文件夹下):
  "include": [
      "app/**/*.d.ts"
  ]

0

对我来说,解决方法是在服务文件顶部添加以下内容:

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

引用显然是将类型定义导入代码的另一种方式,更多信息在这里


2
这不应该是必要的。如果你有很多这样的文件,那么它是不可维护的。一定有另外的解决方案。 - user2846469
这不应该是一个问题。 - CodeMind

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接