diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 32182081c4d..b6af1c49b19 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -69,6 +69,7 @@ namespace ts { const allowSyntheticDefaultImports = getAllowSyntheticDefaultImports(compilerOptions); const strictNullChecks = getStrictOptionValue(compilerOptions, "strictNullChecks"); const strictFunctionTypes = getStrictOptionValue(compilerOptions, "strictFunctionTypes"); + const strictPropertyInitialization = getStrictOptionValue(compilerOptions, "strictPropertyInitialization"); const noImplicitAny = getStrictOptionValue(compilerOptions, "noImplicitAny"); const noImplicitThis = getStrictOptionValue(compilerOptions, "noImplicitThis"); @@ -22230,7 +22231,7 @@ namespace ts { } function checkPropertyInitialization(node: ClassLikeDeclaration) { - if (!strictNullChecks || node.flags & NodeFlags.Ambient) { + if (!strictNullChecks || !strictPropertyInitialization || node.flags & NodeFlags.Ambient) { return; } const constructor = findConstructorDeclaration(node); diff --git a/src/compiler/commandLineParser.ts b/src/compiler/commandLineParser.ts index 8cec21113c8..989bb6a7142 100644 --- a/src/compiler/commandLineParser.ts +++ b/src/compiler/commandLineParser.ts @@ -277,6 +277,13 @@ namespace ts { category: Diagnostics.Strict_Type_Checking_Options, description: Diagnostics.Enable_strict_checking_of_function_types }, + { + name: "strictPropertyInitialization", + type: "boolean", + showInSimplifiedHelpView: true, + category: Diagnostics.Strict_Type_Checking_Options, + description: Diagnostics.Enable_strict_checking_of_property_initialization_in_classes + }, { name: "noImplicitThis", type: "boolean", diff --git a/src/compiler/core.ts b/src/compiler/core.ts index 9f839923e7d..aa91b6d9e94 100644 --- a/src/compiler/core.ts +++ b/src/compiler/core.ts @@ -1923,7 +1923,7 @@ namespace ts { : moduleKind === ModuleKind.System; } - export type StrictOptionName = "noImplicitAny" | "noImplicitThis" | "strictNullChecks" | "strictFunctionTypes" | "alwaysStrict"; + export type StrictOptionName = "noImplicitAny" | "noImplicitThis" | "strictNullChecks" | "strictFunctionTypes" | "strictPropertyInitialization" | "alwaysStrict"; export function getStrictOptionValue(compilerOptions: CompilerOptions, flag: StrictOptionName): boolean { return compilerOptions[flag] === undefined ? compilerOptions.strict : compilerOptions[flag]; diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index df6accb443d..5adcc981a26 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -3330,6 +3330,10 @@ "category": "Message", "code": 6186 }, + "Enable strict checking of property initialization in classes.": { + "category": "Message", + "code": 6187 + }, "Variable '{0}' implicitly has an '{1}' type.": { "category": "Error", "code": 7005