После обновления до Angular 9 не удается найти переменную в файле типизации

У меня есть ссылка на внешний компонент ведения журнала (указанный в файле 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
}

person jazza1000    schedule 22.01.2020    source источник


Ответы (5)


Та же проблема возникла после перехода с 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"
        ],
        ...
    }
}
person Emerica    schedule 11.04.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 в tsconfig.json не требуется)

person Lesiak    schedule 21.02.2020

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

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

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

person jazza1000    schedule 23.01.2020
comment
В этом не должно быть необходимости. Если у вас много этих файлов, их невозможно обслуживать. Должно быть другое решение. - person user2846469; 10.02.2020
comment
Это не должно быть проблемой - person CodeMind; 20.04.2020

В Angular 9 добавьте в файл tsconfig.app.json (потому что он находится в папке src, поэтому *.d.ts находятся в папке app):

  "include": [
      "app/**/*.d.ts"
  ]
person Cyclion    schedule 09.07.2020

Просто добавление typings.d.ts внутрь tsconfig.app.json сработало для меня, не забудьте повторно обслужить ваше приложение после сохранения файла.

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

Угловой v.9

person Sarobidy Iantsa RAJOSIARISAONA    schedule 19.06.2021