diff --git a/packages/schematics/angular/ng-new/index.ts b/packages/schematics/angular/ng-new/index.ts index 1862d086f2..6e39b7d06f 100644 --- a/packages/schematics/angular/ng-new/index.ts +++ b/packages/schematics/angular/ng-new/index.ts @@ -40,6 +40,7 @@ export default function (options: NgNewOptions): Rule { name: options.name, version: options.version, newProjectRoot: options.newProjectRoot || 'projects', + strict: options.strict, }; const applicationOptions: ApplicationOptions = { projectRoot: '', diff --git a/packages/schematics/angular/ng-new/index_spec.ts b/packages/schematics/angular/ng-new/index_spec.ts index fb25a4d41f..84213b78a0 100644 --- a/packages/schematics/angular/ng-new/index_spec.ts +++ b/packages/schematics/angular/ng-new/index_spec.ts @@ -46,4 +46,16 @@ describe('Ng New Schematic', () => { const content = tree.readContent('/bar/angular.json'); expect(content).toMatch(/"prefix": "pre"/); }); + + it('should set strict options in tsconfig.json', () => { + const options = { ...defaultOptions, strict: true }; + const tree = schematicRunner.runSchematic('ng-new', options); + const tsconfig = JSON.parse(tree.readContent('/bar/tsconfig.json')); + + expect(tsconfig.compilerOptions.noImplicitAny).toBe(true); + expect(tsconfig.compilerOptions.strictNullChecks).toBe(true); + expect(tsconfig.compilerOptions.noImplicitThis).toBe(true); + expect(tsconfig.compilerOptions.alwaysStrict).toBe(true); + expect(tsconfig.compilerOptions.strictFunctionTypes).toBe(true); + }); }); diff --git a/packages/schematics/angular/ng-new/schema.d.ts b/packages/schematics/angular/ng-new/schema.d.ts index dfdc8f1082..8dc3a25db9 100644 --- a/packages/schematics/angular/ng-new/schema.d.ts +++ b/packages/schematics/angular/ng-new/schema.d.ts @@ -67,4 +67,8 @@ export interface Schema { * Skip creating spec files. */ skipTests?: boolean; + /** + * Configure TypeScript in strict mode. + */ + strict?: boolean; } diff --git a/packages/schematics/angular/ng-new/schema.json b/packages/schematics/angular/ng-new/schema.json index 9a53a97e89..f4e5c313f6 100644 --- a/packages/schematics/angular/ng-new/schema.json +++ b/packages/schematics/angular/ng-new/schema.json @@ -111,6 +111,11 @@ "type": "boolean", "default": false, "alias": "S" + }, + "strict": { + "type": "boolean", + "description": "Configure TypeScript in strict mode.", + "default": false } }, "required": [ diff --git a/packages/schematics/angular/workspace/files/tsconfig.json b/packages/schematics/angular/workspace/files/tsconfig.json index ef44e2862b..1162343d52 100644 --- a/packages/schematics/angular/workspace/files/tsconfig.json +++ b/packages/schematics/angular/workspace/files/tsconfig.json @@ -15,6 +15,11 @@ "lib": [ "es2017", "dom" - ] + ]<% if (strict) { %>, + "noImplicitAny": true, + "strictNullChecks": true, + "noImplicitThis": true, + "alwaysStrict": true, + "strictFunctionTypes": true<% } %> } } diff --git a/packages/schematics/angular/workspace/index_spec.ts b/packages/schematics/angular/workspace/index_spec.ts index 669403396c..01428e22eb 100644 --- a/packages/schematics/angular/workspace/index_spec.ts +++ b/packages/schematics/angular/workspace/index_spec.ts @@ -55,4 +55,16 @@ describe('Workspace Schematic', () => { expect(pkg.dependencies['zone.js']).toEqual(latestVersions.ZoneJs); expect(pkg.devDependencies['typescript']).toEqual(latestVersions.TypeScript); }); + + it('should set strict options in tsconfig.json', () => { + const options = { ...defaultOptions, strict: true }; + const tree = schematicRunner.runSchematic('workspace', options); + const tsconfig = JSON.parse(tree.readContent('/tsconfig.json')); + + expect(tsconfig.compilerOptions.noImplicitAny).toBe(true); + expect(tsconfig.compilerOptions.strictNullChecks).toBe(true); + expect(tsconfig.compilerOptions.noImplicitThis).toBe(true); + expect(tsconfig.compilerOptions.alwaysStrict).toBe(true); + expect(tsconfig.compilerOptions.strictFunctionTypes).toBe(true); + }); }); diff --git a/packages/schematics/angular/workspace/schema.d.ts b/packages/schematics/angular/workspace/schema.d.ts index 0db451ca11..c07e14ca88 100644 --- a/packages/schematics/angular/workspace/schema.d.ts +++ b/packages/schematics/angular/workspace/schema.d.ts @@ -35,4 +35,8 @@ export interface Schema { * The version of the Angular CLI to use. */ version?: string; + /** + * Configure TypeScript in strict mode. + */ + strict?: boolean; } diff --git a/packages/schematics/angular/workspace/schema.json b/packages/schematics/angular/workspace/schema.json index 81e2a50423..0bcd0991f8 100644 --- a/packages/schematics/angular/workspace/schema.json +++ b/packages/schematics/angular/workspace/schema.json @@ -65,6 +65,11 @@ "type": "string", "description": "The version of the Angular CLI to use.", "visible": false + }, + "strict": { + "type": "boolean", + "description": "Configure TypeScript in strict mode.", + "default": false } }, "required": [