После обновления до Angular 9 не могу найти переменную в наборе файлов - PullRequest
6 голосов
/ 22 января 2020

У меня есть ссылка на внешний компонент ведения журнала (на который есть ссылка в файле js), который я определил в файле наборов

typings.d.ts

declare var LogglyTracker;

Я обновил 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
}

Ответы [ 3 ]

3 голосов
/ 11 апреля 2020

Была такая же проблема после перехода с 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
    ]
}

Я предполагал, что вы уже внесли изменения в tsconfig.json до перехода на Angular 9. Если нет, то здесь:

{
    ...
    "compilerOptions": {
        ...
        "typeRoots": [
            "node_modules/@types",
            "src/typings.d.ts"
        ],
        ...
    }
}
2 голосов
/ 21 февраля 2020

У меня была точно такая же проблема, как и у автора - после обновления до 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, и обнаружил, что 2 файла находятся в разных местах:

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

Я сделал аналогичные изменения в своем перенесенном проекте, обновил ссылки на эти файлы в angular.json и исправил указатели на другие файлы в tsconfig.app.json и tsconfig.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"
  ]
}

Обратите внимание, что все файлы d.ts, помещенные в каталог src, будут извлечены автоматически (нет ссылки в разделе typeRoots * 1032) * необходимо)

0 голосов
/ 23 января 2020

Ну, для меня было решено добавить следующее в начало служебного файла:

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

ссылка, по-видимому, еще один способ импортировать определения типов в код, больше информации здесь

...