Как мне скомпилировать один файл в Typescript? - PullRequest
0 голосов
/ 17 декабря 2018

Итак, я пытаюсь создать версию моего углового веб-приложения на Electron для работы на настольных компьютерах с естественным внешним видом.

У меня есть следующий скрипт в package.json

{
  "name": "app",
  "version": "1.0.0",
  "main": "main.js",
  "license": "MIT",
  "productName":"example",
  "scripts": {
    "ng": "ng",
    "start": "ng serve",
    "build": "ng build",
    "build-prod": "ng build --prod",
    "test": "ng test",
    "lint": "ng lint",
    "e2e": "ng e2e",
    "electron-tsc": "tsc main.ts && ng build --base-href ./ && electron .",
  },

Файл main.ts в основном является примером, приведенным здесь.https://electronjs.org/docs/tutorial/first-app

Проблема в том, что при запуске команды 'npm run electron-tsc' typcript сканирует подпапки моего каталога и пытается скомпилировать все мое угловое приложение также с большим количеством ошибок.

Вот так.

node_modules/@types/selenium-webdriver/http.d.ts: 24: 14 - ошибка TS2583: не удается найти имя «Карта».Вам нужно изменить целевую библиотеку?Попробуйте изменить параметр компилятора lib на es2015 или новее.

24 заголовков: Map;~~~

node_modules/@types/selenium-webdriver/http.d.ts: 48: 14 - ошибка TS2583: не удается найти имя «Карта».Вам нужно изменить целевую библиотеку?Попробуйте изменить параметр компилятора lib на es2015 или новее.

48 заголовков: Map;~~~

node_modules/@types/selenium-webdriver/remote.d.ts: 139: 29 - ошибка TS2583: не удается найти имя «Карта».Вам нужно изменить целевую библиотеку?Попробуйте изменить параметр компилятора lib на es2015 или новее.

139 setEnvironment (env: Map | {[name: string]: string} | null): this;

Мой main.ts не имеет импорта, и команда указывает просто скомпилировать main.ts

. Как это происходит, я все еще получаю действительный файл main.js, и я могу потом просто запустить ng build --base-href ./ && electron . вручную, и все работаетхорошо, это просто разочаровывает, я не могу заставить его собрать и запустить с помощью одной команды, и я не понимаю ошибки.

Вот мой tsconfig.json

{
  "compileOnSave": false,
  "compilerOptions": {
    "outDir": "./dist/out-tsc",
    "sourceMap": true,
    "declaration": false,
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "target": "es5",
    "typeRoots": [
      "node_modules/@types"
    ],
    "lib": [
      "es2017",
      "dom"
    ]
  }

}

1 Ответ

0 голосов
/ 17 декабря 2018

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

Для TypeScript для сканирования файла объявленияи включить его в компиляцию, это должно быть то, от чего вы зависите явно (вы import или require в вашем проекте) или неявно (оно добавляется к types в вашем tsconfig.json).Часто это не совсем ваша зависимость, а зависимость вашей зависимости.Для реальной безопасности типов все в дереве должно быть в порядке.Иногда это просто потому, что предоставленные наборы несовершенны и требуют исправления.

Вы можете начать с обновления @types/selenium-webdriver и обновления ваших зависимостей в целом.Попробуйте запустить npx npm-check --update, чтобы увидеть, что нужно обновить.

Если это не поможет, вы можете написать объявления типов для рассматриваемой библиотеки (и либо отправить их в DefiniteTyped, либо оставить их в своем проекте).

...