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

Posted

技术标签:

【中文标题】如何摆脱警告 .ts 文件是 TypeScript 编译的一部分,但未使用【英文标题】:How to get rid of the warning .ts file is part of the TypeScript compilation but it's unused 【发布时间】:2020-01-03 20:55:50 【问题描述】:

我刚刚将 Angular 更新为最新的 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"
    ]
  

【问题讨论】:

在我的例子中,我有用作接口的类,但在代码中没有找到这些类的用法。所以我把它们都删了。 【参考方案1】:

原来你需要从“include”中删除这一行 "src/**/*.ts" 来自 tsconfig.app.json 并且只在文件中保留入口点(main.ts 和 polyfills.ts)

【讨论】:

似乎将这些文件添加到 tsconfig.app.json 的排除部分可以解决问题 我的tsconfig.app.json 中甚至没有"include" "src/**/*.ts",我仍然收到警告消息。 我的 tsconfig 中没有包含任何内容。我确实有一些排除。但我收到了其中的 29 个警告。如果我添加 main 和 polyfills 的包含,我仍然得到 3。我似乎无法用任何路径组合排除这三个。 我通过使用 npm i @angular/cli@latest 更新 angular-cli 解决了这个问题 知道为什么我没有为 Angular 9 获得这个信息,而是被 Angular 10 淹没在所有这些消息中?【参考方案2】:

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

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

【讨论】:

在我的情况下,我的 tsconfig.app.json 中没有特定的 files 数组条目,并且我会收到我添加到项目中的几乎每个新的 .ts 文件的错误消息。使用上面的 2 个条目文件显式添加“文件”数组,清除警告。【参考方案3】:

在从 Angular 8 升级到 Angular 9 (包括 CLI 本地和全局)后,我看到这些消息抱怨 environment.*.ts 文件,这些文件实际上在 angular.json 中针对不同的构建进行了提及。但是,我没有运行ng update,它可能会使用以下内容更新 tsconfig.json,而是手动更新了 tsconfig.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,所以如果您想针对其他浏览器,您可能需要相应调整。

【讨论】:

我将 tsconfig.app.json 中 include 的值从:["./**/*.ts"] 更改为 ["./**/ *.d.ts"] 这为我删除了警告。 对我来说不是。我删除了.ts 条目(仅保留.d.ts)。现在警告少了。但并未完全删除。我检查了任何 tsconfig。【参考方案4】:

你在使用@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://***.com/a/62573294/16940 指出这一点。

更新到 v10.0.1 为我解决了这个问题,但请参阅上述问题以获取最新信息。

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

【讨论】:

同样在这里使用@angular-builders/custom-webpack": "^9.2.0 尝试了所有解决方案似乎没有什么能阻止警告的 @ramon22 切换到 10.0.0-beta0 对我有用。任何剩余的错误都与 CommonJS 包有关。 如果收到Cannot find module webpack,可能还需要安装或链接webpack (关于 Sielu 的评论)我的技术是安装 webpack(因此在 devDependencies 中明确指定),并将相同的条目添加到 resolutions 以避免可能安装多个版本的 webpack(@ angular-devkit#build-angular 在其对等部门中有 webpack),因为这也可能导致各种问题。要检查您是否安装了多个版本的 webpack,请输入 yarn why webpack(如果您正在使用 npm,请帮自己一个忙并停止 ;))。 到目前为止,你可以做"@angular-builders/custom-webpack": "^10.0.1"【参考方案5】:

今天更新到 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"
  ]

【讨论】:

获取文件“.../main.ts”,未找到角度 10 的错误 我的main.ts文件路径是:"src\main.ts",看看你的是不是一样。无论如何:我还在使用 Angular 9。【参考方案6】:

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

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

【讨论】:

这实际上回答了问题并且应该是标记的答案 - 正如海报所说“我没有使用路由”并且它抱怨路由文件未使用......所以要么使用它要么删除它和警告会消失 我先尝试了所有其他答案,但最后这个答案对我有用,而且是最简单的答案。我实际上有几个模块,我只需将其添加到其中一个模块中,错误就会消失。【参考方案7】:

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"
  ]

【讨论】:

你能补充更多的解释吗?我已经复制了这个,但仍然有错误 @Evan 这是 Angular 9 的。你的版本是什么?【参考方案8】:

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

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

【讨论】:

在 Angular 10.0.1 中为我工作。【参考方案9】:

tsconfig.app.json

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

这个 sn-p 解决了这个问题。

【讨论】:

【参考方案10】:

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

在你的 package.json 中更新

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

你能在这里看到所有版本吗?

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

从 angular/core 检查哪个版本适用于您当前的版本

对于 Angular 10,使用 @angular-devkit/build-angular

的版本 0.1000.3

【讨论】:

该解决方案对我有用,但最好这样做:根据您提供的链接:npm i @angular-devkit/build-angular【参考方案11】:

我开始在 Angular 10 中看到警告,这有点令人惊讶,因为它是一个使用 CLI 开箱即用创建的新应用程序,并且我在为 test.tsenviornments.prod.ts。我认为默认情况下会排除这些文件,但它们不是,这很奇怪。

这些文件不需要 TypeScript 转换;他们不需要将文件的.js 版本捆绑并发送到浏览器。 test.tsenvironments.prod.ts 文件是 Angular 中构建时间要求的一种手段。因此,可以将它们添加到 tsconfig.app.json 中的 exclude 部分或您应用中适用的 TypeScript 配置文件中,如下所示:

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

一旦按上述方式添加,警告将不再显示。

【讨论】:

【参考方案12】:

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

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

@angular-devkit/build-angular codelyzer

【讨论】:

这对我有用:ng update @angular-devkit/build-angular【参考方案13】:

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

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

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

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

import  UserService  from './user.service';

【讨论】:

【参考方案14】:

我尝试了很多方法来解决这个问题,最终我能够解决它。

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

你应该只在angular.json里面有aot: true

在 src/polyfills.ts 中导入 './zone-flags.ts';删除 .ts

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

【讨论】:

medium.com/@grantbrits/… 只需将 ./zone-flags.ts 添加到 tsconfig.app.json 的文件部分。不要修改 polyfills.ts【参考方案15】:

检查您的主要tsconfig.app.json 文件。

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


  "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"
  ]

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

谢谢。

【讨论】:

【参考方案16】:

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

【讨论】:

【参考方案17】:

我的团队几个月来一直在努力解决同样的症状,我终于发现我们的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 文件两次。我不太清楚为什么会爆发出这么多警告;也许我们的网络工作者文件(我们大约有 20 个)不必要地导入了一堆他们不使用的东西。

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

【讨论】:

我会添加关于 tsconfig 文件的一般性评论。对您在 filesincludes 对象中添加的内容保持保守。有一种心理倾向认为“哦,我需要在这里引用我的所有文件!”但是这是错误的。作为一个实验,去掉 includefiles 块中的所有内容,然后只添加使构建成功所需的内容。【参考方案18】:

就我而言,排除未使用的文件更容易:

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

【讨论】:

【参考方案19】:

在我的场景中,我的 tsconfig.json 缺少包含规范文件的排除项。这是修复问题的 tsconfig 文件的 sn-p。

"exclude": [
"**/*.spec.ts",
"./node_modules/*"
],
 "files": [
"src/main.ts",
"src/polyfills.ts"
]

【讨论】:

【参考方案20】:

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

loadChildren: () => import('./components/admin/_admin.module').then(m => m.AdminModule)

在我的 routes.ts 文件中,但没有导入模块。所以如果我只是把

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

它解决了它。

【讨论】:

这是一个延迟加载的模块,您似乎没有理由要导入它来消除延迟加载。

以上是关于如何摆脱警告 .ts 文件是 TypeScript 编译的一部分,但未使用的主要内容,如果未能解决你的问题,请参考以下文章

覆盖 MuiContainer 类时如何摆脱 Typescript 类型错误?

如何摆脱 TypeScript 中的 $injector 类型错误?

如何在 WebStorm 中抑制 TS2322 警告?

VUE_TS项目中类型使用any 报警告Unexpected any. Specify a different type.eslint@typescript-eslint/no-explicit-an

在 VS2017 中忽略来自第三方 javascript 文件的 TS7027 警告?

TSLint 摆脱缺失的空白