如何摆脱警告.ts文件是TypeScript编译的一部分,但未使用

时间:2019-08-30 15:27:20

标签: angular typescript angular-cli

我刚刚将角度更新为最新的9.0.0-next.4。我没有使用路由,但更新后突然看到此警告。我如何删除此警告

  

src/war/angular/src/app/app-routing.module.ts中的警告是   TypeScript编译,但尚未使用。仅将入口点添加到   tsconfig中的“文件”或“包含”属性。

package.json

  "dependencies": {
"@angular/animations": "^9.0.0-next.4",
"@angular/cdk": "^8.1.4",
"@angular/common": "^9.0.0-next.4",
"@angular/compiler": "^9.0.0-next.4",
"@angular/core": "^9.0.0-next.4",
"@angular/forms": "^9.0.0-next.4",
"@angular/material": "^8.1.4",
"@angular/platform-browser": "^9.0.0-next.4",
"@angular/platform-browser-dynamic": "^9.0.0-next.4",
"@angular/router": "^9.0.0-next.4",
"@ng-bootstrap/ng-bootstrap": "^5.1.0",
"bootstrap": "^4.3.1",
"hammerjs": "^2.0.8",
"moment": "^2.24.0",
"ng-image-slider": "^2.0.1",
"panzoom": "^8.1.2",
"rxjs": "~6.5.2",
"tslib": "^1.9.0",
"zone.js": "^0.10.2"
  },
  "devDependencies": {
    "@angular-devkit/build-angular": "^0.803.2",
    "@angular/cli": "^8.3.2",
    "@angular/compiler-cli": "^9.0.0-next.4",
    "@angular/language-service": "^9.0.0-next.4",
    "@types/jasmine": "~3.3.8",
    "@types/jasminewd2": "~2.0.3",
    "@types/node": "~8.9.4",
    "codelyzer": "^5.0.0",
    "jasmine-core": "~3.4.0",
    "jasmine-spec-reporter": "~4.2.1",
    "karma": "~4.1.0",
    "karma-chrome-launcher": "~2.2.0",
    "karma-coverage-istanbul-reporter": "~2.0.1",
    "karma-jasmine": "~2.0.1",
    "karma-jasmine-html-reporter": "^1.4.0",
    "protractor": "~5.4.0",
    "ts-node": "~7.0.0",
    "tslint": "^5.15.0",
    "typescript": "^3.5.3"
  }

tsconfig.json

    {
  "compileOnSave": false,
  "compilerOptions": {
    "baseUrl": "./",
    "outDir": "./dist/out-tsc",
    "sourceMap": true,
    "declaration": false,
    "module": "esnext",
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "importHelpers": true,
    "target": "es2015",
    "typeRoots": [
      "node_modules/@types"
    ],
    "lib": [
      "es2018",
      "dom"
    ]
  }
}

20 个答案:

答案 0 :(得分:39)

我可以通过在files中定义tsconfig.app.json属性来使其工作。这些文件是相对于tsconfig.app.json文件的。

"files": [
    "main.ts",
    "polyfills.ts"
  ]

答案 1 :(得分:17)

从Angular 8升级到Angular 9(包括CLI本地和全局)后,我看到这些消息抱怨关于environment。*。ts文件,这些文件实际上是在angular.json中针对不同的版本提到的。但是,我没有运行ng update,它可能会使用以下内容更新tsconfig.json,而是我手动更新了packages.json。

    "files": [
        "src/main.ts",
        "src/polyfills.ts"
    ],
    "include": [
        "src/**/*.d.ts"
    ]

然后警告消失。

在Visual Studio Professional 2019中使用Angular 9.1.x更新2020-05-27

不再需要上面的小方块。否则,它将导致规格测试代码抱怨“ {未找到模块””模块,因为ng test正在构建并正常运行,并且ng应用的构建和运行正常。显然,NG中的某些内容在9到9.1之间发生了变化。

这是我现在正在工作的tsconfig.json:

{
    "compileOnSave": false,
    "compilerOptions": {
        "baseUrl": "./",
        "outDir": "./dist/out-tsc",
        "sourceMap": true,
        "declaration": false,
        "module": "es2020",
        "moduleResolution": "node",
        "emitDecoratorMetadata": true,
        "experimentalDecorators": true,
        "target": "es2015",
        "typeRoots": [
            "node_modules/@types"
        ],
        "lib": [
            "es2018",
            "dom"
        ],
        "skipLibCheck": true
    }
}

备注:

我仅定位到Google Chrome和Safari,因此,如果要定位其他浏览器,则可能需要进行相应调整。

答案 2 :(得分:14)

今天更新到Angular 9并收到警告。 我的解决方案是在路径中添加此“文件”数组而不包含“ src”。刚刚添加:

 "files": [
    "main.ts",
    "polyfills.ts"
  ],

我完整的tsconfig.app.json文件是:

{
  "extends": "../tsconfig.json",
  "compilerOptions": {
    "outDir": "../out-tsc/app",
    "module": "es2015",
    "types": ["node"]
  },
  "files": [
    "main.ts",
    "polyfills.ts"
  ],
  "exclude": [
    "src/test.ts",
    "**/*.spec.ts"
  ]
}

答案 3 :(得分:11)

您使用@ angular-builders / custom-webpack吗?

我在Angular 10中被这些消息轰炸,从未见过。更改includes没什么区别。

然后我发现了https://github.com/angular/angular/pull/36211

这与该问题中提出的错误基本上相同,但对于ngtypecheck.ts文件(无论它们是完全我不确定!)

/home/circleci/ng/aio/src/main.ngtypecheck.ts中的警告是 TypeScript编译,但尚未使用。仅将入口点添加到 tsconfig中的“文件”或“包含”属性。

在我看来,这实际上与@angular-builders/custom-webpack有关。

https://github.com/just-jeb/angular-builders/issues/781 只是刚刚打开一个问题。感谢https://stackoverflow.com/a/62573294/16940指出这一点。

我已将v10.0.1更新为最新版本,但有关最新信息,请参见上述问题。

"@angular-builders/custom-webpack": "10.0.1"    // as of today

答案 4 :(得分:6)

02-08-2020

Ionic 5+ Angular 9+应用程序。

注意:请参见include部分。

tsconfig.app.json

{
  "extends": "./tsconfig.json",
  "compilerOptions": {
    "outDir": "./out-tsc/app",
    "types": []
  },
  "files": [
    "src/main.ts",
    "src/polyfills.ts"
  ],
  "include": [
    "src/**/*.d.ts"
  ],
  "exclude": [
    "src/**/*.spec.ts"
  ]
}

答案 5 :(得分:6)

这似乎很明显,但是对于您添加但尚未引用/导入到另一个文件的任何文件,您都会看到此警告。当您尝试编辑一个受到警告的文件时,这将变得显而易见,并且在编辑文件后Ivy不会自动重新编译。一旦将模块导入到相关文件中并开始使用它,警告就会消失。

上面的答案可能与某些答案有关,但是我在本文中刚刚描述的是我发出警告的根本原因。请注意,我的tsconfig.json或tsconfig.app.json中没有包含或文件数组,并且在我实际引用项目其他位置的文件时,警告就消失了。

答案 6 :(得分:5)

原来,您需要从“包含”中删除此行 "src/**/*.ts"中的tsconfig.app.json,仅将入口点保留在文件中(main.ts和polyfills.ts)

答案 7 :(得分:3)

只需添加zone-flags.ts并删除所有包含项即可。

 "files": [
    "src/main.ts",
    "src/polyfills.ts",
    "src/zone-flags.ts"
  ]

答案 8 :(得分:2)

tsconfig.app.json

 "exclude": [
    "src/**/*.spec.ts",
    "src/test.ts",
    "src/environments/environment.prod.ts"
  ]

这个片段解决了这个问题。

答案 9 :(得分:1)

尝试了之前的解决方案建议后,它对我有用

在package.json中更新

"@angular-devkit/build-angular": "~0.1000.3" 

在这里可以看到所有版本吗?

https://www.npmjs.com/package/@angular-devkit/build-angular?activeTab=versions

从角度/核心检查哪个版本适合您的当前版本

对于angular 10使用 @ angular-devkit / build-angular 的版本 0.1000.3

答案 10 :(得分:0)

对我来说,问题在于我正在使用:

loadChildren: () => import('./components/admin/_admin.module').then(m => m.AdminModule)
我的route.ts文件中的

,但未导入模块。所以,如果我刚放

import { AdminModule } from './components/admin/_admin.module';

它解决了。

答案 11 :(得分:0)

我尝试了很多方法来解决此问题,最终我得以解决。

我的问题是将角度8.1中找到的应用程序更新为角度9.x,但是该应用程序还使用了Ionic

您在aot: true内只能有angular.json

在src / polyfills.ts中

导入'./zone-flags.ts';删除.ts

https://medium.com/@grantbrits/upgrade-ionic-4-to-ionic-5-angular-76514079fb2a enter image description here

答案 12 :(得分:0)

@Felix您需要使用

更新您的延迟加载路由
loadChildren: (() => import('../path/to/lazyloaded/module.module')).then( m => m.ModuleClassName)

因为#符号在Angular 8+中不再可用

答案 13 :(得分:0)

检查主tsconfig.app.json文件。

enter image description here

看看里面是否有以下内容,

{
  "extends": "./tsconfig.json",
  "compilerOptions": {
    "outDir": "./out-tsc/app",
    "types": []
  },
  "files": [
    "src/main.ts",
    "src/polyfills.ts"
  ],
  "include": [
    "src/**/*.d.ts"
  ]
}

最有可能的原因是这条线。

仅将入口点添加到tsconfig中的filesinclude属性中。

因此,如果您的tsconfig.app.json上有这些行,请删除它们。这就是错误所在:)

"exclude": [
    "src/test.ts",
    "**/*.spec.ts"
  ]

我希望这会对某人有所帮助。

谢谢。

答案 14 :(得分:0)

升级到Angular 10后,我得到了相同的警告。运行npm i报告某些开发依赖项的版本不匹配。升级这些(npm i <package>@latest,并将nodejs更新到版本12(之前是版本10)后,警告消失了。

就我而言,这些是必须更新的软件包:

  • @angular-devkit/build-angular
  • codelyzer

答案 15 :(得分:0)

将angular 9应用程序更新为angular 10之后,我遇到了同样的问题。更新angular-devkit解决了它。

答案 16 :(得分:0)

就我而言,警告所报告的类确实已使用。但是,问题在于,导入它们时,它们的扩展名为“ .js”。

因此,此行导致错误“ src \ app \ user.service.ts中的警告是TypeScript编译的一部分,但未使用”:

import { UserService } from './user.service.js';

我可以通过删除“ .js”扩展名来修复它:

import { UserService } from './user.service';

答案 17 :(得分:0)

几个月来,我的团队一直在为同样的症状敲打我们的头,我终于发现我们的 tsconfig.worker.json 太包容了。在我们的例子中,显示了数百条“TypeScript 编译的一部分,但未使用”消息——似乎应用程序中的每个 ts 文件都被列出,有些是多次列出。

原来的样子:

"include": [
  "src/**/*.worker.ts"
]

是什么阻止了有缺陷的行为:

"files": [ ]   # no include or exclude block

认为发生的事情是我们标准的 tsconfig.app.json 的 files 对象就足够了。仅从这些入口点(main.ts 和 polyfills.ts),TS 编译器就能够找到对我们所有 *.worker.ts 文件的引用并编译它们。 tsconfig.webworker.ts 配置以某种方式告诉编译器在所有 *.webworker.ts 文件中查看两次。我不太确定为什么会出现这么多警告;也许我们的 webworker 文件(我们有大约 20 个)不必要地导入了一堆他们不使用的东西。

无论如何,通过这个调整,我摆脱了无数警告,我们的编译时间减少了一半。呼!

答案 18 :(得分:-1)

请在您的tsconfig.json文件中尝试以下操作:

{
  "compileOnSave": false,
  "compilerOptions": {
    "baseUrl": "./",
    "outDir": "./dist/out-tsc",
    "sourceMap": true,
    "declaration": false,
    "module": "esnext",
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "importHelpers": true,
    "target": "es2015",
    "typeRoots": [
      "node_modules/@types"
    ],
    "lib": [
      "es2018",
      "dom"
    ],
    "include": [
      "src/**/*" //or "../src/**/*.ts"
  ],
  "exclude": [
    //files to exclude: example below
      "node_modules",
      "**/*.spec.ts"
  ]
  }
}

有关更多信息,请参阅:https://www.typescriptlang.org/docs/handbook/tsconfig-json.html

答案 19 :(得分:-1)

我开始在Angular 10中看到警告,基于它是开箱即用的CLI创建的新应用,在为{{ 1}}和test.ts。我认为默认情况下会排除这些文件,但事实并非如此。

要解决的问题是,TypeScript转换不需要这些文件。他们不需要捆绑enviornments.prod.ts版的文件并将其发送到浏览器。 .jstest.ts文件是结束Angular中构建时间要求的一种方法。因此,可以将它们添加到environments.prod.ts的{​​{1}}部分或您应用中的适用TypeScript配置文件中,如下所示:

exclude

如上所述添加这些内容后,警告将不再显示。