From 00ff0e5bb8952a3478c118e3833f2d93119dbc7c Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders Date: Fri, 4 Nov 2016 08:22:55 -0700 Subject: [PATCH] Do not add undefined to parameter properties They are actually properties, so don't get undefined added when they have an initialiser. Also update baselines --- src/compiler/checker.ts | 4 +++- tests/baselines/reference/optionalMethods.js | 4 ++-- tests/baselines/reference/optionalMethods.types | 6 +++--- 3 files changed, 8 insertions(+), 6 deletions(-) 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