Angular 中的 Typescript 编译器
Typescript compiler in Angular
我想知道,如果有一些选项,如何从 TSC 命令中排除 node_modules 包。
我正在使用 Typescript v3.5.3。我的 tsconfig.json 是
{
"compilerOptions": {
"outDir": "build/dist",
"module": "esnext",
"target": "es5",
"lib": ["es2018", "dom"],
"sourceMap": true,
"allowJs": true,
"jsx": "preserve",
"moduleResolution": "node",
"rootDir": "src",
"forceConsistentCasingInFileNames": true,
"noImplicitReturns": true,
"noImplicitThis": true,
"noImplicitAny": true,
"strictNullChecks": true,
"suppressImplicitAnyIndexErrors": true,
"skipLibCheck": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"strict": false,
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"typeRoots": ["node_modules/@types"]
},
"exclude": [
"build",
"config",
"node_modules"
],
"include": [
"src"
]
}
还有一个 angular 这样的脚本
import { Component } from "@angular/core";
@Component({
selector: "app-home",
styleUrls: ["./home.component.less"],
templateUrl: "./home.component.html"
})
export class HomeComponent {
title = "angular home";
constructor(){
this.log(123);
this.log('hello world');
}
log(someArg) {
console.log(someArg);
}
}
现在,如果我 运行 TSC,我预计会出现错误,因为函数 log 是隐含的任何类型。在这种情况下一切正常!但如果我将使用此代码
import { Node } from "@alfresco/js-api";
import { Component } from "@angular/core";
@Component({
selector: "app-home",
styleUrls: ["./home.component.less"],
templateUrl: "./home.component.html"
})
export class HomeComponent {
title = "angular home";
selectedNode: Node;
constructor(){
this.log(123);
this.log('hello world');
}
log(someArg) {
console.log(someArg);
}
}
我会从 node_modules 的包中得到错误,比如
node_modules/@alfresco/js-api/src/authentication/processAuth.ts:181:9 - error TS2322: Type 'null' is not assignable to type 'string | undefined'.
181 this.authentications.basicAuth.username = null;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我知道为什么,因为 "noImplicitAny" 设置为 true,但我想要的是忽略 node_modules 包!因此在 Angular 中从 tsconfig 中排除选项没有任何意义。我认为,构建是包 @alfresco/js-api 包含在脚本中并作为一个检查。
有趣的是,如果我将在 React.js 中使用类似的代码,一切都如我所料。当我使用带有 "noImplicitAny" = true 的命令 "TSC" 并且 node_modules 包将被忽略时,是否有一些选项或其他东西?非常感谢!
使用 import 引用的文件必须由 tsc命令。排除是为了方便,而运行 tsc命令排除要导入(或使用)的文件中未导入(或使用)的文件被编译。
默认情况下,tsc命令忽略node_modules,这就是为什么当 @alfresco/js-api 没有导入时没有错误,当它被包含时 TSC 将解决它们并在这些文件上暗示 compilerOptions。
Any files that are referenced by files included via the "files" or "include" properties are also included. Similarly, if a file B.ts is referenced by another file A.ts, then B.ts cannot be excluded unless the referencing file A.ts is also specified in the "exclude" list.
所以这完全取决于错误和导入的模块,而不是 typescript 编译器。
请阅读此问题线程了解更多详情,https://github.com/microsoft/TypeScript/issues/7432
因此,要解决此问题,请使用其他模块或关闭 Implicits 的编译器选项。
我想知道,如果有一些选项,如何从 TSC 命令中排除 node_modules 包。
我正在使用 Typescript v3.5.3。我的 tsconfig.json 是
{
"compilerOptions": {
"outDir": "build/dist",
"module": "esnext",
"target": "es5",
"lib": ["es2018", "dom"],
"sourceMap": true,
"allowJs": true,
"jsx": "preserve",
"moduleResolution": "node",
"rootDir": "src",
"forceConsistentCasingInFileNames": true,
"noImplicitReturns": true,
"noImplicitThis": true,
"noImplicitAny": true,
"strictNullChecks": true,
"suppressImplicitAnyIndexErrors": true,
"skipLibCheck": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"strict": false,
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"typeRoots": ["node_modules/@types"]
},
"exclude": [
"build",
"config",
"node_modules"
],
"include": [
"src"
]
}
还有一个 angular 这样的脚本
import { Component } from "@angular/core";
@Component({
selector: "app-home",
styleUrls: ["./home.component.less"],
templateUrl: "./home.component.html"
})
export class HomeComponent {
title = "angular home";
constructor(){
this.log(123);
this.log('hello world');
}
log(someArg) {
console.log(someArg);
}
}
现在,如果我 运行 TSC,我预计会出现错误,因为函数 log 是隐含的任何类型。在这种情况下一切正常!但如果我将使用此代码
import { Node } from "@alfresco/js-api";
import { Component } from "@angular/core";
@Component({
selector: "app-home",
styleUrls: ["./home.component.less"],
templateUrl: "./home.component.html"
})
export class HomeComponent {
title = "angular home";
selectedNode: Node;
constructor(){
this.log(123);
this.log('hello world');
}
log(someArg) {
console.log(someArg);
}
}
我会从 node_modules 的包中得到错误,比如
node_modules/@alfresco/js-api/src/authentication/processAuth.ts:181:9 - error TS2322: Type 'null' is not assignable to type 'string | undefined'.
181 this.authentications.basicAuth.username = null; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我知道为什么,因为 "noImplicitAny" 设置为 true,但我想要的是忽略 node_modules 包!因此在 Angular 中从 tsconfig 中排除选项没有任何意义。我认为,构建是包 @alfresco/js-api 包含在脚本中并作为一个检查。
有趣的是,如果我将在 React.js 中使用类似的代码,一切都如我所料。当我使用带有 "noImplicitAny" = true 的命令 "TSC" 并且 node_modules 包将被忽略时,是否有一些选项或其他东西?非常感谢!
使用 import 引用的文件必须由 tsc命令。排除是为了方便,而运行 tsc命令排除要导入(或使用)的文件中未导入(或使用)的文件被编译。
默认情况下,tsc命令忽略node_modules,这就是为什么当 @alfresco/js-api 没有导入时没有错误,当它被包含时 TSC 将解决它们并在这些文件上暗示 compilerOptions。
Any files that are referenced by files included via the "files" or "include" properties are also included. Similarly, if a file B.ts is referenced by another file A.ts, then B.ts cannot be excluded unless the referencing file A.ts is also specified in the "exclude" list.
所以这完全取决于错误和导入的模块,而不是 typescript 编译器。
请阅读此问题线程了解更多详情,https://github.com/microsoft/TypeScript/issues/7432
因此,要解决此问题,请使用其他模块或关闭 Implicits 的编译器选项。