Как использовать libman вместо npm для загрузки определений машинописи - PullRequest
0 голосов
/ 29 ноября 2018

Когда я устанавливаю определения машинописи с помощью 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 answer) и явное указание пути к модулю 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 - это зависимость начальной загрузки 4. Это довольно сложно, потому что @types/bootstrap зависит от popper.jsвместо @types/popper.js (что несовместимо и приведет к ошибкам машинописания в @ types / bootstrap / index.d.ts);

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

1 Ответ

0 голосов
/ 30 ноября 2018

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

См. Обсуждение здесь

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

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

...