From 604631881cfe883fe32e62a780315ad8f73ea7d2 Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders Date: Fri, 16 Dec 2016 13:38:29 -0800 Subject: [PATCH] Add `| undefined` in .d.ts for initialised params --- src/compiler/declarationEmitter.ts | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/compiler/declarationEmitter.ts b/src/compiler/declarationEmitter.ts index 23122d05612..9c8cd96280f 100644 --- a/src/compiler/declarationEmitter.ts +++ b/src/compiler/declarationEmitter.ts @@ -319,12 +319,12 @@ namespace ts { } } - function writeTypeOfDeclaration(declaration: AccessorDeclaration | VariableLikeDeclaration, type: TypeNode, getSymbolAccessibilityDiagnostic: GetSymbolAccessibilityDiagnostic, addUndefined?: boolean) { + function writeTypeOfDeclaration(declaration: AccessorDeclaration | VariableLikeDeclaration, type: TypeNode, getSymbolAccessibilityDiagnostic: GetSymbolAccessibilityDiagnostic) { writer.getSymbolAccessibilityDiagnostic = getSymbolAccessibilityDiagnostic; write(": "); if (type) { // Write the type - emitType(type, addUndefined); + emitType(type); } else { errorNameNode = declaration.name; @@ -384,7 +384,7 @@ namespace ts { emitType(type); } - function emitType(type: TypeNode | Identifier | QualifiedName, addUndefined?: boolean) { + function emitType(type: TypeNode | Identifier | QualifiedName) { switch (type.kind) { case SyntaxKind.AnyKeyword: case SyntaxKind.StringKeyword: @@ -1593,7 +1593,10 @@ namespace ts { emitTypeOfVariableDeclarationFromTypeLiteral(node); } else if (!hasModifier(node.parent, ModifierFlags.Private)) { - writeTypeOfDeclaration(node, node.type, getParameterDeclarationTypeVisibilityError, !!node.initializer && !(getModifierFlags(node) & ModifierFlags.ParameterPropertyModifier)); + // use the checker's type, not the declared type, for an initialized parameter (that isn't a parameter property) + const isInitializedParameter = node.initializer && !(getModifierFlags(node) & ModifierFlags.ParameterPropertyModifier); + const typeNode = isInitializedParameter ? undefined : node.type; + writeTypeOfDeclaration(node, typeNode, getParameterDeclarationTypeVisibilityError); } function getParameterDeclarationTypeVisibilityError(symbolAccessibilityResult: SymbolAccessibilityResult): SymbolAccessibilityDiagnostic {