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