From c82d4a61e39d3ba5fc42618dda92c2375a706b85 Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders Date: Fri, 30 Oct 2015 14:01:06 -0700 Subject: [PATCH] Forbid 'this' as constructor parameter type --- src/compiler/checker.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index d1dbc966952..a1207d023c7 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -4420,12 +4420,19 @@ namespace ts { let container = getThisContainer(node, /*includeArrowFunctions*/ false); let parent = container && container.parent; if (parent && (isClassLike(parent) || parent.kind === SyntaxKind.InterfaceDeclaration)) { - if (!(container.flags & NodeFlags.Static)) { + if (!(container.flags & NodeFlags.Static) && !isConstructorParameter(node, container)) { return getDeclaredTypeOfClassOrInterface(getSymbolOfNode(parent)).thisType; } } error(node, Diagnostics.A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface); return unknownType; + + function isConstructorParameter(node: TypeNode, container: Node) { + if (container.kind === SyntaxKind.Constructor) { + let ctor = (container); + return !ctor.body.statements.some(st => st === node.parent); + } + } } function getTypeFromThisTypeNode(node: TypeNode): Type {