Bootstrap 4 Определение типа TypeScript не может быть скомпилировано - Не удается найти модуль popper.js - PullRequest
0 голосов
/ 26 февраля 2019

Я пытаюсь настроить проект TypeScript и заставить загрузчик 4 работать вместе с Popper , jQuery и Knockout в коде Visual Studio.

Я установил определения типов knockout, jquery и bootstrap,

npm install -–save @types/knockout
npm install -–save @types/jquery
npm install --save @types/bootstrap

ссылается на файлы JS в конфигурации require.js

declare var require: any;
require.config({
    paths: {
        "knockout": "externals/knockout-3.5.0",
        "jquery": "externals/jquery-3.3.1.min",
        "popper.js": "https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js",
        "bootstrap": "https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"
    }
})

my tsconfig.json:

{
    "compilerOptions": {
        "baseUrl": ".",
        "paths": { 
            "*": ["types/*"] 
        },
        "outDir": "./built/",
        "sourceMap": true,
        "noImplicitAny": true,
        "module": "amd",
        "target": "es5"
    },
    "files":[
        "src/require-config.ts",
        "src/hello.ts"
    ]
}

Я иду, чтобы скомпилировать проект, и получаю следующую ошибку:

node_modules/@types/bootstrap/index.d.ts:9:25 - error TS2307: Cannot find module 'popper.js'.

9 import * as Popper from "popper.js";
                          ~~~~~~~~~~~

Found 1 error.

The terminal process terminated with exit code: 1

Похоже, мой файл определения типа Bootstrap не удается скомпилировать, так как он не может найти модуль popper.js.

Модуль popper.js - это в моей папке @types

node_modules
 |-@types
 |  |- bootstrap
 |     |-index.d.ts (this is failing)
 |- popper.js
    |- index.d.ts (popper.js type definition)

Как мне сообщить компилятору TypeScript, что popper.js - это определение типа начальной загрузкиищет находится выше в иерархии?

Мне не удалось найти ответы даже близко к этому.Итак, либо я наткнулся на ошибку, с которой никто никогда не сталкивался (маловероятно), либо, будучи новичком в Typescript, я неправильно настроил свою среду и пропустил очень простой шаг настройки, который получают все остальные, и, таким образом, никто никогдапришлось спросить (очень вероятно).

Что я могу сделать, чтобы это исправить?

1 Ответ

0 голосов
/ 26 февраля 2019

Два варианта для вас:

  • удалить параметр конфигурации "module": "amd" ИЛИ
  • добавить параметр "moduleResolution": "node".

Второй параметрвыглядит так:

"moduleResolution": "node",
"module": "amd",

Почему эти опции работают?

Короче говоря, когда мы используем amd модули, стратегия разрешения модулей по умолчанию - Classic , а не Node .Важное различие между ними заключается в том, что стратегия Node распознает имена каталогов как модули, в то время как классическая стратегия - нет.

Более подробная информация о стратегиях разрешения модулей приведена здесь ,

...