如何在Typescript中编译单个文件?

时间:2018-12-17 17:26:50

标签: angular typescript electron

因此,我试图创建我的Angle Web应用程序的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'时,打字稿正在扫描目录的子文件夹,并尝试编译我的整个angular应用程序,同时也出现很多错误。

喜欢这个。

  

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]:   字符串} | null):这;

我的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 :(得分:1)

使用--skipLibCheck将抑制错误,而不是解决错误。短期内没关系(只是为了在解决根本原因的同时让您前进),但是由于它完全退出了库类型检查,因此确实是一支步枪。

为使TypeScript扫描声明文件并将其包含在编译中,它必须是您显式依赖的项目(您在项目中为importrequire),或者是隐式的(已添加到{ {1}}在您的types中)。通常情况下,它与您的依赖关系并不完全相同。为了实现真正的类型安全,树中的所有内容必须井井有条。有时,这仅仅是因为所提供的类型不完美,需要修复。

您通常可以先更新tsconfig.json并更新依赖项。尝试运行@types/selenium-webdriver来查看需要更新的内容。

如果这样做没有帮助,则可以为相关库编写类型声明(并将其发送到DefinitelyTyped或将其保留在项目中)。