diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index a459db40e1b..814a0032104 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -3206,7 +3206,9 @@ namespace ts { // Use the type of the initializer expression if one is present if (declaration.initializer) { const type = checkDeclarationInitializer(declaration); - const isOptional = declaration.questionToken || (declaration.initializer && declaration.kind === SyntaxKind.Parameter); + // initialized parameters (but not parameter properties) are optional + const isOptional = declaration.questionToken || + (declaration.kind === SyntaxKind.Parameter && !(getModifierFlags(declaration) & ModifierFlags.ParameterPropertyModifier)); return addOptionality(type, isOptional && includeOptionality); } diff --git a/tests/baselines/reference/optionalMethods.js b/tests/baselines/reference/optionalMethods.js index 953ebb527a5..28ed0bcd76e 100644 --- a/tests/baselines/reference/optionalMethods.js +++ b/tests/baselines/reference/optionalMethods.js @@ -128,11 +128,11 @@ interface Foo { declare function test1(x: Foo): void; declare class Bar { d: number; - e: number | undefined; + e: number; a: number; b?: number; c?: number | undefined; - constructor(d?: number, e?: number | undefined); + constructor(d?: number, e?: number); f(): number; g?(): number; h?(): number; diff --git a/tests/baselines/reference/optionalMethods.types b/tests/baselines/reference/optionalMethods.types index cf86f8b6bcf..cf545eda509 100644 --- a/tests/baselines/reference/optionalMethods.types +++ b/tests/baselines/reference/optionalMethods.types @@ -87,7 +87,7 @@ class Bar { constructor(public d?: number, public e = 10) {} >d : number | undefined ->e : number | undefined +>e : number >10 : 10 f() { @@ -133,9 +133,9 @@ function test2(x: Bar) { >d : number | undefined x.e; ->x.e : number | undefined +>x.e : number >x : Bar ->e : number | undefined +>e : number x.f; >x.f : () => number