ошибка TS2503: не удается найти пространство имен «WebMidi» - PullRequest
0 голосов
/ 28 июня 2019

У меня есть рабочее пространство Angular, содержащее библиотеку и приложение для ее тестирования.

projects/
├── midi-app
│   ├── browserslist
│   ├── karma.conf.js
│   ├── src
│   ├── tsconfig.app.json
│   ├── tsconfig.spec.json
│   └── tslint.json
├── midi-app-e2e
│   ├── protractor.conf.js
│   ├── src
│   └── tsconfig.e2e.json
└── midi-lib
    ├── karma.conf.js
    ├── ng-package.json
    ├── package.json
    ├── README.md
    ├── src
    ├── tsconfig.lib.json
    ├── tsconfig.spec.json
    └── tslint.json

Я использую @types/webmidi, и редактор VSCode не жалуется.

Я также могу успешно собрать библиотеку с ng build midi-lib --watch, и компиляция завершится.

Но затем, когда я пытаюсь обслуживать приложение с помощью команды ng serve из того же каталога, оно завершается с ошибкой error TS2503: Cannot find namespace 'WebMidi'.

Раньше он работал нормально только до вчерашнего утра, когда я открывал ноутбук и пытался обслуживать приложение, когда он не работал. Я не делал никаких изменений в коде со дня, когда он работал нормально.

Я пытался очистить, но ничего не изменилось:

rm -fr node_modules package-lock.json
npm cache clean
npm install

Вот некоторые файлы конфигурации.

Файл tsconfig.json:

{
  "compileOnSave": false,
  "compilerOptions": {
    "outDir": "./dist/out-tsc",
    "sourceMap": true,
    "declaration": false,
    "module": "es2015",
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "importHelpers": true,
    "target": "es5",
    "lib": [
      "es2018",
      "dom"
    ],
    "baseUrl": "./",
    "paths": {
      "@app/*": ["projects/midi-app/src/app/*"],
      "@lib/*": ["projects/midi-lib/src/lib/*"],
      "midi-lib": [
        "dist/midi-lib"
      ],
      "midi-lib/*": [
        "dist/midi-lib/*"
      ]
    }
  }
}

Файл tsconfig-lib.json:

{
  "extends": "../../tsconfig.json",
  "compilerOptions": {
    "outDir": "../../out-tsc/lib",
    "target": "es2015",
    "module": "es2015",
    "moduleResolution": "node",
    "declaration": true,
    "sourceMap": true,
    "inlineSources": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "importHelpers": true,
    "typeRoots": [
      "../../node_modules/@types"
    ],
    "lib": [
      "dom",
      "es2018"
    ]
  },
  "angularCompilerOptions": {
    "annotateForClosureCompiler": true,
    "skipTemplateCodegen": true,
    "strictMetadataEmit": true,
    "fullTemplateTypeCheck": true,
    "strictInjectionParameters": true,
    "enableResourceInlining": true
  },
  "exclude": [
    "src/test.ts",
    "**/*.spec.ts"
  ]
}

Я пытался добавить

"typeRoots": [
  "node_modules/@types"
],

в файле tsconfig.json, но это совсем не помогло.

И я тоже пытался удалить

"typeRoots": [
   "../../node_modules/@types"
],

из файла tsconfig-lib.json, но это опять не помогло.

ОБНОВЛЕНИЕ: проблема исчезла, и я понятия не имею, почему. Это потому что я обновил typescript до 3.2.4? Или потому что я удалил зависимость webmidi 2.3.3 из файла package.json? Высокий Чапарал ...

1 Ответ

0 голосов
/ 28 июня 2019

Попробуйте, чтобы увидеть, работает ли

В вашем tsconfig.app.json

{
  "extends": "../tsconfig.json",
  "compilerOptions": {
    "outDir": "../out-tsc/app",
    "types": ["webmidi"] // add here
  },
  "exclude": ["test.ts", "**/*.spec.ts"]
}
...