Как использовать libman вместо npm для загрузки определений машинописи

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

  1. Создать новое базовое веб-приложение ASP.NET в Visual Studio
  2. Добавьте jQuery с помощью libman
  3. Добавьте jQuery, используя npm install @types/jQuery
  4. Создайте новый машинописный файл: wwwroot / js / site.ts. Это добавляет <TypeScriptCompile Include="wwwroot\js\site.ts" /> в.csproj.
  5. Теперь я могу использовать $ глобальная переменная в моих машинописных файлах

Однако, когда я использую libman для загрузки определений машинописного текста, у меня возникают проблемы с настройкой сборки машинописного текста для их использования.

Я думаю, мне нужно добавить tsconfig.json, но, похоже, это мешает TypeScriptCompile в csproj.

wwwroot
  js
    site.d.ts
    site.ts
  lib
    jquery
       jquery.min.js
    @types
       jquery
         index.d.ts
         misc.d.ts
         …
MyProject.csproj
libman.json

Как мне изменить проект (.csproj, tsconfig.json), чтобы я работал с файлами определений и глобальными переменными в wwwroot \ lib \ @types вместо node_modules / @ types?

Я создал tsconfig.json и установил

  "compilerOptions": {
    "typeRoots": [ "wwwroot/lib/@types" ]
  }

но теперь сборка возвращает ошибки типа "Не удается найти имя MyInterface" в site.ts. MyInterface определяется в site.d.ts. Почему тип был распознан, когда tsconfig.json не было, а теперь нет? Я хочу избежать добавления ///<reference> Комментарии

РЕДАКТИРОВАТЬ:

В итоге я переименовал site.d.ts в global.d.ts (благодаря ответу @itminus) и явно установил путь к модулю popper.js в tsconfig:

{
  "compileOnSave": true,
  "compilerOptions": {
    "baseUrl": "./",
    "paths": {
      "popper.js": [ "wwwroot/lib/popper.js" ] //use this instead of wwwroot/lib/@types/popper.js which is incompatible
    },
    "typeRoots": [ "wwwroot/lib/@types" ]
  },
  "include": [ "wwwroot/js/**/*.ts" ]
}

popper.js - это зависимость от bootstrap 4. Это довольно сложно, потому что @types/bootstrap зависит от popper.js скорее, чем @types/popper.js (что несовместимо и может привести к ошибкам машинописания в @types/bootstrap/index.d.ts);

К счастью, popper.js содержит определения машинописного текста (index.d.ts), мне просто нужно было указать компилятору машинописного текста, где его искать.

1 ответ

Решение

Я думаю, причина в том, что у вас site.ts а также site.d.ts в той же папке. В результате только site.ts файл загружен.

Смотрите обсуждение здесь

Процесс разрешения всегда отдает предпочтение файлам.ts над.d.ts. рациональным здесь является то, что файл.d.ts может быть сгенерирован из файла.ts, поэтому файл.ts является более современной версией истины.

Переместить ваш site.d.ts в другие папки или переименуйте его в site.global.d.ts, Оба работают безупречно для меня.

Другие вопросы по тегам