From dfa149457c86f101c03b0828d72a975966e651a2 Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Sun, 14 Jun 2015 07:10:25 -0700 Subject: [PATCH 01/17] Allow expressions in extends clause of class --- src/compiler/checker.ts | 232 ++++++++++-------- .../diagnosticInformationMap.generated.ts | 4 + src/compiler/diagnosticMessages.json | 16 ++ src/compiler/types.ts | 1 + 4 files changed, 157 insertions(+), 96 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index c8150d644a2..7feee34d7b0 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -2600,6 +2600,47 @@ module ts { return concatenate(getOuterTypeParametersOfClassOrInterface(symbol), getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol)); } + function isConstructorType(type: Type): boolean { + return type.flags & TypeFlags.ObjectType && getSignaturesOfType(type, SignatureKind.Construct).length > 0; + } + + function getBaseTypeNodeOfClass(type: InterfaceType): ExpressionWithTypeArguments { + return getClassExtendsHeritageClauseElement(type.symbol.valueDeclaration); + } + + function getConstructorsForTypeArguments(type: ObjectType, typeArguments: TypeNode[]): Signature[] { + let typeArgCount = typeArguments ? typeArguments.length : 0; + return filter(getSignaturesOfType(type, SignatureKind.Construct), + sig => (sig.typeParameters ? sig.typeParameters.length : 0) === typeArgCount); + } + + function getBaseConstructorTypeOfClass(type: InterfaceType): ObjectType { + if (!type.baseConstructorType) { + let baseTypeNode = getBaseTypeNodeOfClass(type); + if (!baseTypeNode) { + return type.baseConstructorType = unknownType; + } + if (!pushTypeResolution(type)) { + return unknownType; + } + let baseConstructorType = checkExpressionCached(baseTypeNode.expression); + if (baseConstructorType.flags & TypeFlags.ObjectType) { + // Force resolution of members such that we catch circularities + resolveObjectOrUnionTypeMembers(baseConstructorType); + } + if (!popTypeResolution()) { + error(type.symbol.valueDeclaration, Diagnostics._0_is_referenced_directly_or_indirectly_in_its_own_base_expression, symbolToString(type.symbol)); + return type.baseConstructorType = unknownType; + } + if (baseConstructorType !== unknownType && !isConstructorType(baseConstructorType)) { + error(baseTypeNode, Diagnostics.Base_expression_is_not_of_a_constructor_function_type); + return type.baseConstructorType = unknownType; + } + type.baseConstructorType = baseConstructorType; + } + return type.baseConstructorType; + } + function getBaseTypes(type: InterfaceType): ObjectType[] { let typeWithBaseTypes = type; if (!typeWithBaseTypes.baseTypes) { @@ -2613,30 +2654,45 @@ module ts { Debug.fail("type must be class or interface"); } } - return typeWithBaseTypes.baseTypes; } function resolveBaseTypesOfClass(type: InterfaceTypeWithBaseTypes): void { - type.baseTypes = []; - let declaration = getDeclarationOfKind(type.symbol, SyntaxKind.ClassDeclaration); - let baseTypeNode = getClassExtendsHeritageClauseElement(declaration); - if (baseTypeNode) { - let baseType = getTypeFromTypeNode(baseTypeNode); - if (baseType !== unknownType) { - if (getTargetType(baseType).flags & TypeFlags.Class) { - if (type !== baseType && !hasBaseType(baseType, type)) { - type.baseTypes.push(baseType); - } - else { - error(declaration, Diagnostics.Type_0_recursively_references_itself_as_a_base_type, typeToString(type, /*enclosingDeclaration*/ undefined, TypeFormatFlags.WriteArrayAsGenericType)); - } - } - else { - error(baseTypeNode, Diagnostics.A_class_may_only_extend_another_class); - } - } + type.baseTypes = emptyArray; + let baseContructorType = getBaseConstructorTypeOfClass(type); + if (baseContructorType === unknownType) { + return; } + let baseTypeNode = getBaseTypeNodeOfClass(type); + let baseType: Type; + if (baseContructorType.symbol && baseContructorType.symbol.flags & SymbolFlags.Class) { + baseType = getTypeFromClassOrInterfaceReference(baseTypeNode, baseContructorType.symbol); + } + else { + let constructors = getConstructorsForTypeArguments(baseContructorType, baseTypeNode.typeArguments); + if (!constructors.length) { + error(baseTypeNode, Diagnostics.No_base_constructor_has_the_specified_number_of_type_arguments); + return; + } + let constructor = constructors[0]; + if (baseTypeNode.typeArguments) { + constructor = getSignatureInstantiation(constructor, map(baseTypeNode.typeArguments, getTypeFromTypeNode)); + } + baseType = getReturnTypeOfSignature(constructor); + } + if (baseType === unknownType) { + return; + } + if (!(getTargetType(baseType).flags & (TypeFlags.Class | TypeFlags.Interface))) { + error(baseTypeNode, Diagnostics.Base_constructor_does_not_return_a_class_or_interface_type); + return; + } + if (type === baseType || hasBaseType(baseType, type)) { + error(type.symbol.valueDeclaration, Diagnostics.Type_0_recursively_references_itself_as_a_base_type, + typeToString(type, /*enclosingDeclaration*/ undefined, TypeFormatFlags.WriteArrayAsGenericType)); + return; + } + type.baseTypes = [baseType]; } function resolveBaseTypesOfInterface(type: InterfaceTypeWithBaseTypes): void { @@ -2645,7 +2701,6 @@ module ts { if (declaration.kind === SyntaxKind.InterfaceDeclaration && getInterfaceBaseTypeNodes(declaration)) { for (let node of getInterfaceBaseTypeNodes(declaration)) { let baseType = getTypeFromTypeNode(node); - if (baseType !== unknownType) { if (getTargetType(baseType).flags & (TypeFlags.Class | TypeFlags.Interface)) { if (type !== baseType && !hasBaseType(baseType, type)) { @@ -2867,20 +2922,26 @@ module ts { sig.minArgumentCount, sig.hasRestParameter, sig.hasStringLiterals); } - function getDefaultConstructSignatures(classType: InterfaceType): Signature[]{ - let baseTypes = getBaseTypes(classType); - if (baseTypes.length) { - let baseType = baseTypes[0]; - let baseSignatures = getSignaturesOfType(getTypeOfSymbol(baseType.symbol), SignatureKind.Construct); - return map(baseSignatures, baseSignature => { - let signature = baseType.flags & TypeFlags.Reference ? - getSignatureInstantiation(baseSignature, (baseType).typeArguments) : cloneSignature(baseSignature); - signature.typeParameters = classType.localTypeParameters; - signature.resolvedReturnType = classType; - return signature; - }); + function getDefaultConstructSignatures(classType: InterfaceType): Signature[] { + if (!getBaseTypes(classType).length) { + return [createSignature(undefined, classType.localTypeParameters, emptyArray, classType, undefined, 0, false, false)]; } - return [createSignature(undefined, classType.localTypeParameters, emptyArray, classType, undefined, 0, false, false)]; + let baseConstructorType = getBaseConstructorTypeOfClass(classType); + let baseSignatures = getSignaturesOfType(baseConstructorType, SignatureKind.Construct); + let baseTypeNode = getBaseTypeNodeOfClass(classType); + let typeArguments = map(baseTypeNode.typeArguments, getTypeFromTypeNode); + let typeArgCount = typeArguments ? typeArguments.length : 0; + let result: Signature[] = []; + for (let baseSig of baseSignatures) { + let typeParamCount = baseSig.typeParameters ? baseSig.typeParameters.length : 0; + if (typeParamCount === typeArgCount) { + let sig = typeParamCount ? getSignatureInstantiation(baseSig, typeArguments) : cloneSignature(baseSig); + sig.typeParameters = classType.localTypeParameters; + sig.resolvedReturnType = classType; + result.push(sig); + } + } + return result; } function createTupleTypeMemberSymbols(memberTypes: Type[]): SymbolTable { @@ -2992,10 +3053,10 @@ module ts { if (!constructSignatures.length) { constructSignatures = getDefaultConstructSignatures(classType); } - let baseTypes = getBaseTypes(classType); - if (baseTypes.length) { + let baseConstructorType = getBaseConstructorTypeOfClass(classType); + if (baseConstructorType !== unknownType) { members = createSymbolTable(getNamedMembers(members)); - addInheritedMembers(members, getPropertiesOfObjectType(getTypeOfSymbol(baseTypes[0].symbol))); + addInheritedMembers(members, getPropertiesOfObjectType(baseConstructorType)); } } stringIndexType = undefined; @@ -4127,14 +4188,14 @@ module ts { return !node.typeParameters && node.parameters.length && !forEach(node.parameters, p => p.type); } - function getTypeWithoutConstructors(type: Type): Type { + function getTypeWithoutSignatures(type: Type): Type { if (type.flags & TypeFlags.ObjectType) { let resolved = resolveObjectOrUnionTypeMembers(type); if (resolved.constructSignatures.length) { let result = createObjectType(TypeFlags.Anonymous, type.symbol); result.members = resolved.members; result.properties = resolved.properties; - result.callSignatures = resolved.callSignatures; + result.callSignatures = emptyArray; result.constructSignatures = emptyArray; type = result; } @@ -5891,15 +5952,11 @@ module ts { function checkSuperExpression(node: Node): Type { let isCallExpression = node.parent.kind === SyntaxKind.CallExpression && (node.parent).expression === node; - let enclosingClass = getAncestor(node, SyntaxKind.ClassDeclaration); - let baseClass: Type; - if (enclosingClass && getClassExtendsHeritageClauseElement(enclosingClass)) { - let classType = getDeclaredTypeOfSymbol(getSymbolOfNode(enclosingClass)); - let baseTypes = getBaseTypes(classType); - baseClass = baseTypes.length && baseTypes[0]; - } + let classDeclaration = getAncestor(node, SyntaxKind.ClassDeclaration); + let classType = classDeclaration && getDeclaredTypeOfSymbol(getSymbolOfNode(classDeclaration)); + let baseClassType = classType && getBaseTypes(classType)[0]; - if (!baseClass) { + if (!baseClassType) { error(node, Diagnostics.super_can_only_be_referenced_in_a_derived_class); return unknownType; } @@ -5954,11 +6011,11 @@ module ts { if ((container.flags & NodeFlags.Static) || isCallExpression) { getNodeLinks(node).flags |= NodeCheckFlags.SuperStatic; - returnType = getTypeOfSymbol(baseClass.symbol); + returnType = getBaseConstructorTypeOfClass(classType); } else { getNodeLinks(node).flags |= NodeCheckFlags.SuperInstance; - returnType = baseClass; + returnType = baseClassType; } if (container.kind === SyntaxKind.Constructor && isInConstructorArgumentInitializer(node, container)) { @@ -7381,7 +7438,7 @@ module ts { if (node.expression.kind === SyntaxKind.SuperKeyword) { let superType = checkSuperExpression(node.expression); if (superType !== unknownType) { - return resolveCall(node, getSignaturesOfType(superType, SignatureKind.Construct), candidatesOutArray); + return resolveCall(node, getConstructorsForTypeArguments(superType, getEffectiveTypeArguments(node)), candidatesOutArray); } return resolveUntypedCall(node); } @@ -8963,35 +9020,31 @@ module ts { checkDecorators(node); } - function checkTypeReferenceNode(node: TypeReferenceNode) { - checkGrammarTypeReferenceInStrictMode(node.typeName); - return checkTypeReferenceOrExpressionWithTypeArguments(node); + function checkTypeArgumentsAndConstraints(typeParameters: TypeParameter[], typeArguments: TypeNode[]) { + for (let i = 0; i < typeArguments.length; i++) { + let typeArgument = typeArguments[i]; + checkSourceElement(typeArgument); + let constraint = getConstraintOfTypeParameter(typeParameters[i]); + if (produceDiagnostics && constraint) { + checkTypeAssignableTo(getTypeFromTypeNode(typeArgument), constraint, typeArgument, Diagnostics.Type_0_does_not_satisfy_the_constraint_1); + } + } } - function checkExpressionWithTypeArguments(node: ExpressionWithTypeArguments) { - checkGrammarExpressionWithTypeArgumentsInStrictMode(node.expression); - - return checkTypeReferenceOrExpressionWithTypeArguments(node); - } - - function checkTypeReferenceOrExpressionWithTypeArguments(node: TypeReferenceNode | ExpressionWithTypeArguments) { - // Grammar checking + function checkTypeReferenceNode(node: TypeReferenceNode | ExpressionWithTypeArguments) { + if (node.kind === SyntaxKind.TypeReference) { + checkGrammarTypeReferenceInStrictMode((node).typeName); + } + else { + checkGrammarExpressionWithTypeArgumentsInStrictMode((node).expression); + } checkGrammarTypeArguments(node, node.typeArguments); - let type = getTypeFromTypeReference(node); if (type !== unknownType && node.typeArguments) { // Do type argument local checks only if referenced type is successfully resolved let symbol = getNodeLinks(node).resolvedSymbol; let typeParameters = symbol.flags & SymbolFlags.TypeAlias ? getSymbolLinks(symbol).typeParameters : (type).target.localTypeParameters; - let len = node.typeArguments.length; - for (let i = 0; i < len; i++) { - checkSourceElement(node.typeArguments[i]); - let constraint = getConstraintOfTypeParameter(typeParameters[i]); - if (produceDiagnostics && constraint) { - let typeArgument = (type).typeArguments[i]; - checkTypeAssignableTo(typeArgument, constraint, node, Diagnostics.Type_0_does_not_satisfy_the_constraint_1); - } - } + checkTypeArgumentsAndConstraints(typeParameters, node.typeArguments); } } @@ -10596,45 +10649,33 @@ module ts { let symbol = getSymbolOfNode(node); let type = getDeclaredTypeOfSymbol(symbol); let staticType = getTypeOfSymbol(symbol); + let baseTypeNode = getClassExtendsHeritageClauseElement(node); if (baseTypeNode) { - if (!isSupportedExpressionWithTypeArguments(baseTypeNode)) { - error(baseTypeNode.expression, Diagnostics.Only_identifiers_Slashqualified_names_with_optional_type_arguments_are_currently_supported_in_a_class_extends_clauses); - } - emitExtends = emitExtends || !isInAmbientContext(node); - checkExpressionWithTypeArguments(baseTypeNode); - } - let baseTypes = getBaseTypes(type); - if (baseTypes.length) { - if (produceDiagnostics) { + // !!! checkExpressionWithTypeArguments(baseTypeNode); + let baseTypes = getBaseTypes(type); + if (baseTypes.length && produceDiagnostics) { let baseType = baseTypes[0]; - checkTypeAssignableTo(type, baseType, node.name || node, Diagnostics.Class_0_incorrectly_extends_base_class_1); - let staticBaseType = getTypeOfSymbol(baseType.symbol); - checkTypeAssignableTo(staticType, getTypeWithoutConstructors(staticBaseType), node.name || node, - Diagnostics.Class_static_side_0_incorrectly_extends_base_class_static_side_1); - - if (baseType.symbol !== resolveEntityName(baseTypeNode.expression, SymbolFlags.Value)) { - error(baseTypeNode, Diagnostics.Type_name_0_in_extends_clause_does_not_reference_constructor_function_for_0, typeToString(baseType)); + let staticBaseType = getBaseConstructorTypeOfClass(type); + if (baseTypeNode.typeArguments) { + let constructors = getConstructorsForTypeArguments(staticBaseType, baseTypeNode.typeArguments); + checkTypeArgumentsAndConstraints(constructors[0].typeParameters, baseTypeNode.typeArguments); } - + checkTypeAssignableTo(type, baseType, node.name || node, Diagnostics.Class_0_incorrectly_extends_base_class_1); + checkTypeAssignableTo(staticType, getTypeWithoutSignatures(staticBaseType), node.name || node, + Diagnostics.Class_static_side_0_incorrectly_extends_base_class_static_side_1); checkKindsOfPropertyMemberOverrides(type, baseType); } } - if (baseTypes.length || (baseTypeNode && compilerOptions.isolatedModules)) { - // Check that base type can be evaluated as expression - checkExpressionOrQualifiedName(baseTypeNode.expression); - } - let implementedTypeNodes = getClassImplementsHeritageClauseElements(node); if (implementedTypeNodes) { forEach(implementedTypeNodes, typeRefNode => { if (!isSupportedExpressionWithTypeArguments(typeRefNode)) { error(typeRefNode.expression, Diagnostics.A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments); } - - checkExpressionWithTypeArguments(typeRefNode); + checkTypeReferenceNode(typeRefNode); if (produceDiagnostics) { let t = getTypeFromTypeNode(typeRefNode); if (t !== unknownType) { @@ -10834,8 +10875,7 @@ module ts { if (!isSupportedExpressionWithTypeArguments(heritageElement)) { error(heritageElement.expression, Diagnostics.An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments); } - - checkExpressionWithTypeArguments(heritageElement); + checkTypeReferenceNode(heritageElement); }); forEach(node.members, checkSourceElement); diff --git a/src/compiler/diagnosticInformationMap.generated.ts b/src/compiler/diagnosticInformationMap.generated.ts index 0c8be2d3c54..3c75f388a3e 100644 --- a/src/compiler/diagnosticInformationMap.generated.ts +++ b/src/compiler/diagnosticInformationMap.generated.ts @@ -379,6 +379,10 @@ module ts { Cannot_find_namespace_0: { code: 2503, category: DiagnosticCategory.Error, key: "Cannot find namespace '{0}'." }, No_best_common_type_exists_among_yield_expressions: { code: 2504, category: DiagnosticCategory.Error, key: "No best common type exists among yield expressions." }, A_generator_cannot_have_a_void_type_annotation: { code: 2505, category: DiagnosticCategory.Error, key: "A generator cannot have a 'void' type annotation." }, + _0_is_referenced_directly_or_indirectly_in_its_own_base_expression: { code: 2506, category: DiagnosticCategory.Error, key: "'{0}' is referenced directly or indirectly in its own base expression." }, + Base_expression_is_not_of_a_constructor_function_type: { code: 2507, category: DiagnosticCategory.Error, key: "Base expression is not of a constructor function type." }, + No_base_constructor_has_the_specified_number_of_type_arguments: { code: 2508, category: DiagnosticCategory.Error, key: "No base constructor has the specified number of type arguments." }, + Base_constructor_does_not_return_a_class_or_interface_type: { code: 2509, category: DiagnosticCategory.Error, key: "Base constructor does not return a class or interface type." }, Import_declaration_0_is_using_private_name_1: { code: 4000, category: DiagnosticCategory.Error, key: "Import declaration '{0}' is using private name '{1}'." }, Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: { code: 4002, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of exported class has or is using private name '{1}'." }, Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1: { code: 4004, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of exported interface has or is using private name '{1}'." }, diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index 08273011745..db062b759f3 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -1505,6 +1505,22 @@ "category": "Error", "code": 2505 }, + "'{0}' is referenced directly or indirectly in its own base expression.": { + "category": "Error", + "code": 2506 + }, + "Base expression is not of a constructor function type.": { + "category": "Error", + "code": 2507 + }, + "No base constructor has the specified number of type arguments.": { + "category": "Error", + "code": 2508 + }, + "Base constructor does not return a class or interface type.": { + "category": "Error", + "code": 2509 + }, "Import declaration '{0}' is using private name '{1}'.": { "category": "Error", diff --git a/src/compiler/types.ts b/src/compiler/types.ts index a50d6e9a45c..c4c37226133 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -1660,6 +1660,7 @@ module ts { typeParameters: TypeParameter[]; // Type parameters (undefined if non-generic) outerTypeParameters: TypeParameter[]; // Outer type parameters (undefined if none) localTypeParameters: TypeParameter[]; // Local type parameters (undefined if none) + baseConstructorType?: Type; // Base constructor type of class } export interface InterfaceTypeWithBaseTypes extends InterfaceType { From 80ea68701b910e7e9189574e3c25ad33f5924c1c Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Mon, 15 Jun 2015 10:27:59 -0700 Subject: [PATCH 02/17] Use instantiated signatures in super calls --- src/compiler/checker.ts | 59 +++++++++++++++-------------------------- 1 file changed, 22 insertions(+), 37 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 7feee34d7b0..13235f64b9e 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -2608,22 +2608,31 @@ module ts { return getClassExtendsHeritageClauseElement(type.symbol.valueDeclaration); } - function getConstructorsForTypeArguments(type: ObjectType, typeArguments: TypeNode[]): Signature[] { - let typeArgCount = typeArguments ? typeArguments.length : 0; + function getConstructorsForTypeArguments(type: ObjectType, typeArgumentNodes: TypeNode[]): Signature[] { + let typeArgCount = typeArgumentNodes ? typeArgumentNodes.length : 0; return filter(getSignaturesOfType(type, SignatureKind.Construct), sig => (sig.typeParameters ? sig.typeParameters.length : 0) === typeArgCount); } + function getInstantiatedConstructorsForTypeArguments(type: ObjectType, typeArgumentNodes: TypeNode[]): Signature[] { + let signatures = getConstructorsForTypeArguments(type, typeArgumentNodes); + if (typeArgumentNodes) { + let typeArguments = map(typeArgumentNodes, getTypeFromTypeNode); + signatures = map(signatures, sig => getSignatureInstantiation(sig, typeArguments)); + } + return signatures; + } + function getBaseConstructorTypeOfClass(type: InterfaceType): ObjectType { if (!type.baseConstructorType) { let baseTypeNode = getBaseTypeNodeOfClass(type); if (!baseTypeNode) { - return type.baseConstructorType = unknownType; + return type.baseConstructorType = undefinedType; } if (!pushTypeResolution(type)) { return unknownType; } - let baseConstructorType = checkExpressionCached(baseTypeNode.expression); + let baseConstructorType = checkExpression(baseTypeNode.expression); if (baseConstructorType.flags & TypeFlags.ObjectType) { // Force resolution of members such that we catch circularities resolveObjectOrUnionTypeMembers(baseConstructorType); @@ -2632,7 +2641,7 @@ module ts { error(type.symbol.valueDeclaration, Diagnostics._0_is_referenced_directly_or_indirectly_in_its_own_base_expression, symbolToString(type.symbol)); return type.baseConstructorType = unknownType; } - if (baseConstructorType !== unknownType && !isConstructorType(baseConstructorType)) { + if (baseConstructorType !== unknownType && baseConstructorType !== nullType && !isConstructorType(baseConstructorType)) { error(baseTypeNode, Diagnostics.Base_expression_is_not_of_a_constructor_function_type); return type.baseConstructorType = unknownType; } @@ -2660,7 +2669,7 @@ module ts { function resolveBaseTypesOfClass(type: InterfaceTypeWithBaseTypes): void { type.baseTypes = emptyArray; let baseContructorType = getBaseConstructorTypeOfClass(type); - if (baseContructorType === unknownType) { + if (!(baseContructorType.flags & TypeFlags.ObjectType)) { return; } let baseTypeNode = getBaseTypeNodeOfClass(type); @@ -2669,16 +2678,12 @@ module ts { baseType = getTypeFromClassOrInterfaceReference(baseTypeNode, baseContructorType.symbol); } else { - let constructors = getConstructorsForTypeArguments(baseContructorType, baseTypeNode.typeArguments); + let constructors = getInstantiatedConstructorsForTypeArguments(baseContructorType, baseTypeNode.typeArguments); if (!constructors.length) { error(baseTypeNode, Diagnostics.No_base_constructor_has_the_specified_number_of_type_arguments); return; } - let constructor = constructors[0]; - if (baseTypeNode.typeArguments) { - constructor = getSignatureInstantiation(constructor, map(baseTypeNode.typeArguments, getTypeFromTypeNode)); - } - baseType = getReturnTypeOfSignature(constructor); + baseType = getReturnTypeOfSignature(constructors[0]); } if (baseType === unknownType) { return; @@ -3054,7 +3059,7 @@ module ts { constructSignatures = getDefaultConstructSignatures(classType); } let baseConstructorType = getBaseConstructorTypeOfClass(classType); - if (baseConstructorType !== unknownType) { + if (baseConstructorType.flags & TypeFlags.ObjectType) { members = createSymbolTable(getNamedMembers(members)); addInheritedMembers(members, getPropertiesOfObjectType(baseConstructorType)); } @@ -7202,35 +7207,13 @@ module ts { return args; } - /** - * In a 'super' call, type arguments are not provided within the CallExpression node itself. - * Instead, they must be fetched from the class declaration's base type node. - * - * If 'node' is a 'super' call (e.g. super(...), new super(...)), then we attempt to fetch - * the type arguments off the containing class's first heritage clause (if one exists). Note that if - * type arguments are supplied on the 'super' call, they are ignored (though this is syntactically incorrect). - * - * In all other cases, the call's explicit type arguments are returned. - */ - function getEffectiveTypeArguments(callExpression: CallExpression): TypeNode[] { - if (callExpression.expression.kind === SyntaxKind.SuperKeyword) { - let containingClass = getAncestor(callExpression, SyntaxKind.ClassDeclaration); - let baseClassTypeNode = containingClass && getClassExtendsHeritageClauseElement(containingClass); - return baseClassTypeNode && baseClassTypeNode.typeArguments; - } - else { - // Ordinary case - simple function invocation. - return callExpression.typeArguments; - } - } - function resolveCall(node: CallLikeExpression, signatures: Signature[], candidatesOutArray: Signature[]): Signature { let isTaggedTemplate = node.kind === SyntaxKind.TaggedTemplateExpression; let typeArguments: TypeNode[]; if (!isTaggedTemplate) { - typeArguments = getEffectiveTypeArguments(node); + typeArguments = (node).typeArguments; // We already perform checking on the type arguments on the class declaration itself. if ((node).expression.kind !== SyntaxKind.SuperKeyword) { @@ -7438,7 +7421,9 @@ module ts { if (node.expression.kind === SyntaxKind.SuperKeyword) { let superType = checkSuperExpression(node.expression); if (superType !== unknownType) { - return resolveCall(node, getConstructorsForTypeArguments(superType, getEffectiveTypeArguments(node)), candidatesOutArray); + let baseTypeNode = getClassExtendsHeritageClauseElement(getAncestor(node, SyntaxKind.ClassDeclaration)); + let baseConstructors = getInstantiatedConstructorsForTypeArguments(superType, baseTypeNode.typeArguments); + return resolveCall(node, baseConstructors, candidatesOutArray); } return resolveUntypedCall(node); } From 956d73ef5e7f92095393e1dccd2d1e293269bd51 Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Mon, 15 Jun 2015 10:44:21 -0700 Subject: [PATCH 03/17] Accepting new baselines --- .../checkForObjectTooStrict.errors.txt | 40 ----------------- .../reference/checkForObjectTooStrict.symbols | 42 ++++++++++++++++++ .../reference/checkForObjectTooStrict.types | 44 +++++++++++++++++++ .../classExtendingPrimitive.errors.txt | 13 +++--- .../classExtendingPrimitive2.errors.txt | 7 +-- .../classExtendingQualifiedName.errors.txt | 4 +- ...ithModuleNotReferingConstructor.errors.txt | 4 +- ...useClassNotReferringConstructor.errors.txt | 4 +- .../classExtendsEveryObjectType.errors.txt | 29 ++++++------ .../classExtendsEveryObjectType2.errors.txt | 13 +++--- .../classExtendsInterface.errors.txt | 10 ++--- .../reference/classExtendsItself.errors.txt | 12 ++--- .../classExtendsItselfIndirectly.errors.txt | 24 +++++++--- .../classExtendsItselfIndirectly2.errors.txt | 22 +++++++--- .../classExtendsItselfIndirectly3.errors.txt | 30 +++++++++---- ...endsShadowedConstructorFunction.errors.txt | 4 +- ...ExtendsValidConstructorFunction.errors.txt | 4 +- .../reference/classInheritence.errors.txt | 4 +- .../reference/classUpdateTests.errors.txt | 8 +--- ...ericRecursiveBaseClassReference.errors.txt | 4 +- .../reference/constraints0.errors.txt | 4 +- .../reference/extBaseClass2.errors.txt | 4 +- .../extendNonClassSymbol1.errors.txt | 9 ---- .../extendNonClassSymbol2.errors.txt | 4 +- .../reference/generatorTypeCheck40.errors.txt | 9 ++-- .../reference/generatorTypeCheck60.errors.txt | 9 ++-- ...eReferenceWithoutTypeArgument.d.errors.txt | 4 +- ...peReferenceWithoutTypeArgument2.errors.txt | 10 ++--- ...peReferenceWithoutTypeArgument3.errors.txt | 4 +- .../baselines/reference/generics1.errors.txt | 4 +- .../baselines/reference/generics2.errors.txt | 4 +- .../baselines/reference/generics5.errors.txt | 4 +- .../reference/importAsBaseClass.errors.txt | 4 +- .../baselines/reference/importAsBaseClass.js | 1 + .../indirectSelfReference.errors.txt | 11 +++-- .../indirectSelfReferenceGeneric.errors.txt | 11 +++-- ...inheritFromGenericTypeParameter.errors.txt | 4 +- ...nWithConstraintCheckingDeferred.errors.txt | 4 +- ...-does-not-affect-class-heritage.errors.txt | 6 +-- .../reference/recursiveBaseCheck.errors.txt | 18 ++++++-- .../reference/recursiveBaseCheck2.errors.txt | 9 ++-- .../reference/recursiveBaseCheck3.errors.txt | 9 ++-- .../reference/recursiveBaseCheck4.errors.txt | 4 +- .../reference/recursiveBaseCheck6.errors.txt | 4 +- ...eReservedWordInClassDeclaration.errors.txt | 9 ++-- .../subtypingWithNumericIndexer2.errors.txt | 4 +- .../subtypingWithNumericIndexer3.errors.txt | 4 +- .../subtypingWithNumericIndexer4.errors.txt | 4 +- .../subtypingWithStringIndexer2.errors.txt | 4 +- .../subtypingWithStringIndexer3.errors.txt | 4 +- .../subtypingWithStringIndexer4.errors.txt | 4 +- .../thisInInvalidContexts.errors.txt | 4 +- ...InInvalidContextsExternalModule.errors.txt | 4 +- .../typeParameterAsBaseClass.errors.txt | 4 +- .../typeParameterAsBaseType.errors.txt | 8 ++-- .../reference/undeclaredBase.errors.txt | 4 +- ...unctionCallsWithTypeParameters1.errors.txt | 9 ++-- 57 files changed, 317 insertions(+), 225 deletions(-) delete mode 100644 tests/baselines/reference/checkForObjectTooStrict.errors.txt create mode 100644 tests/baselines/reference/checkForObjectTooStrict.symbols create mode 100644 tests/baselines/reference/checkForObjectTooStrict.types delete mode 100644 tests/baselines/reference/extendNonClassSymbol1.errors.txt diff --git a/tests/baselines/reference/checkForObjectTooStrict.errors.txt b/tests/baselines/reference/checkForObjectTooStrict.errors.txt deleted file mode 100644 index 7af7481f6ae..00000000000 --- a/tests/baselines/reference/checkForObjectTooStrict.errors.txt +++ /dev/null @@ -1,40 +0,0 @@ -tests/cases/compiler/checkForObjectTooStrict.ts(22,19): error TS2311: A class may only extend another class. -tests/cases/compiler/checkForObjectTooStrict.ts(26,9): error TS2335: 'super' can only be referenced in a derived class. - - -==== tests/cases/compiler/checkForObjectTooStrict.ts (2 errors) ==== - module Foo { - - export class Object { - - } - - } - - - - class Bar extends Foo.Object { // should work - - constructor () { - - super(); - - } - - } - - - class Baz extends Object { - ~~~~~~ -!!! error TS2311: A class may only extend another class. - - constructor () { // ERROR, as expected - - super(); - ~~~~~ -!!! error TS2335: 'super' can only be referenced in a derived class. - - } - - } - \ No newline at end of file diff --git a/tests/baselines/reference/checkForObjectTooStrict.symbols b/tests/baselines/reference/checkForObjectTooStrict.symbols new file mode 100644 index 00000000000..48e04392c3b --- /dev/null +++ b/tests/baselines/reference/checkForObjectTooStrict.symbols @@ -0,0 +1,42 @@ +=== tests/cases/compiler/checkForObjectTooStrict.ts === +module Foo { +>Foo : Symbol(Foo, Decl(checkForObjectTooStrict.ts, 0, 0)) + + export class Object { +>Object : Symbol(Object, Decl(checkForObjectTooStrict.ts, 0, 12)) + + } + +} + + + +class Bar extends Foo.Object { // should work +>Bar : Symbol(Bar, Decl(checkForObjectTooStrict.ts, 6, 1)) +>Foo.Object : Symbol(Foo.Object, Decl(checkForObjectTooStrict.ts, 0, 12)) +>Foo : Symbol(Foo, Decl(checkForObjectTooStrict.ts, 0, 0)) +>Object : Symbol(Foo.Object, Decl(checkForObjectTooStrict.ts, 0, 12)) + + constructor () { + + super(); +>super : Symbol(Foo.Object, Decl(checkForObjectTooStrict.ts, 0, 12)) + + } + +} + + +class Baz extends Object { +>Baz : Symbol(Baz, Decl(checkForObjectTooStrict.ts, 18, 1)) +>Object : Symbol(Object, Decl(lib.d.ts, 92, 1), Decl(lib.d.ts, 223, 11)) + + constructor () { // ERROR, as expected + + super(); +>super : Symbol(ObjectConstructor, Decl(lib.d.ts, 124, 1)) + + } + +} + diff --git a/tests/baselines/reference/checkForObjectTooStrict.types b/tests/baselines/reference/checkForObjectTooStrict.types new file mode 100644 index 00000000000..3dd47c79743 --- /dev/null +++ b/tests/baselines/reference/checkForObjectTooStrict.types @@ -0,0 +1,44 @@ +=== tests/cases/compiler/checkForObjectTooStrict.ts === +module Foo { +>Foo : typeof Foo + + export class Object { +>Object : Object + + } + +} + + + +class Bar extends Foo.Object { // should work +>Bar : Bar +>Foo.Object : any +>Foo : typeof Foo +>Object : Foo.Object + + constructor () { + + super(); +>super() : void +>super : typeof Foo.Object + + } + +} + + +class Baz extends Object { +>Baz : Baz +>Object : Object + + constructor () { // ERROR, as expected + + super(); +>super() : void +>super : ObjectConstructor + + } + +} + diff --git a/tests/baselines/reference/classExtendingPrimitive.errors.txt b/tests/baselines/reference/classExtendingPrimitive.errors.txt index ae039640e99..68525a1eabd 100644 --- a/tests/baselines/reference/classExtendingPrimitive.errors.txt +++ b/tests/baselines/reference/classExtendingPrimitive.errors.txt @@ -4,13 +4,12 @@ tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/cla tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendingPrimitive.ts(6,18): error TS2304: Cannot find name 'Void'. tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendingPrimitive.ts(7,19): error TS1109: Expression expected. tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendingPrimitive.ts(8,18): error TS2304: Cannot find name 'Null'. -tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendingPrimitive.ts(9,19): error TS9002: Only identifiers/qualified-names with optional type arguments are currently supported in a class 'extends' clauses. -tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendingPrimitive.ts(10,18): error TS2304: Cannot find name 'undefined'. +tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendingPrimitive.ts(10,18): error TS2507: Base expression is not of a constructor function type. tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendingPrimitive.ts(11,18): error TS2304: Cannot find name 'Undefined'. -tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendingPrimitive.ts(14,18): error TS2311: A class may only extend another class. +tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendingPrimitive.ts(14,18): error TS2507: Base expression is not of a constructor function type. -==== tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendingPrimitive.ts (10 errors) ==== +==== tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendingPrimitive.ts (9 errors) ==== // classes cannot extend primitives class C extends number { } @@ -32,11 +31,9 @@ tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/cla ~~~~ !!! error TS2304: Cannot find name 'Null'. class C5a extends null { } - ~~~~ -!!! error TS9002: Only identifiers/qualified-names with optional type arguments are currently supported in a class 'extends' clauses. class C6 extends undefined { } ~~~~~~~~~ -!!! error TS2304: Cannot find name 'undefined'. +!!! error TS2507: Base expression is not of a constructor function type. class C7 extends Undefined { } ~~~~~~~~~ !!! error TS2304: Cannot find name 'Undefined'. @@ -44,4 +41,4 @@ tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/cla enum E { A } class C8 extends E { } ~ -!!! error TS2311: A class may only extend another class. \ No newline at end of file +!!! error TS2507: Base expression is not of a constructor function type. \ No newline at end of file diff --git a/tests/baselines/reference/classExtendingPrimitive2.errors.txt b/tests/baselines/reference/classExtendingPrimitive2.errors.txt index 3bba9b9e041..2303ca6323d 100644 --- a/tests/baselines/reference/classExtendingPrimitive2.errors.txt +++ b/tests/baselines/reference/classExtendingPrimitive2.errors.txt @@ -1,13 +1,10 @@ tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendingPrimitive2.ts(3,19): error TS1109: Expression expected. -tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendingPrimitive2.ts(4,19): error TS9002: Only identifiers/qualified-names with optional type arguments are currently supported in a class 'extends' clauses. -==== tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendingPrimitive2.ts (2 errors) ==== +==== tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendingPrimitive2.ts (1 errors) ==== // classes cannot extend primitives class C4a extends void {} ~~~~ !!! error TS1109: Expression expected. - class C5a extends null { } - ~~~~ -!!! error TS9002: Only identifiers/qualified-names with optional type arguments are currently supported in a class 'extends' clauses. \ No newline at end of file + class C5a extends null { } \ No newline at end of file diff --git a/tests/baselines/reference/classExtendingQualifiedName.errors.txt b/tests/baselines/reference/classExtendingQualifiedName.errors.txt index b63b3e23108..f04d07c89e6 100644 --- a/tests/baselines/reference/classExtendingQualifiedName.errors.txt +++ b/tests/baselines/reference/classExtendingQualifiedName.errors.txt @@ -1,4 +1,4 @@ -tests/cases/compiler/classExtendingQualifiedName.ts(5,23): error TS2305: Module 'M' has no exported member 'C'. +tests/cases/compiler/classExtendingQualifiedName.ts(5,23): error TS2339: Property 'C' does not exist on type 'typeof M'. ==== tests/cases/compiler/classExtendingQualifiedName.ts (1 errors) ==== @@ -8,6 +8,6 @@ tests/cases/compiler/classExtendingQualifiedName.ts(5,23): error TS2305: Module class D extends M.C { ~ -!!! error TS2305: Module 'M' has no exported member 'C'. +!!! error TS2339: Property 'C' does not exist on type 'typeof M'. } } \ No newline at end of file diff --git a/tests/baselines/reference/classExtendsClauseClassMergedWithModuleNotReferingConstructor.errors.txt b/tests/baselines/reference/classExtendsClauseClassMergedWithModuleNotReferingConstructor.errors.txt index 50c90389520..b1c5d253b56 100644 --- a/tests/baselines/reference/classExtendsClauseClassMergedWithModuleNotReferingConstructor.errors.txt +++ b/tests/baselines/reference/classExtendsClauseClassMergedWithModuleNotReferingConstructor.errors.txt @@ -1,4 +1,4 @@ -tests/cases/compiler/classExtendsClauseClassMergedWithModuleNotReferingConstructor.ts(10,21): error TS2419: Type name 'A' in extends clause does not reference constructor function for 'A'. +tests/cases/compiler/classExtendsClauseClassMergedWithModuleNotReferingConstructor.ts(10,21): error TS2507: Base expression is not of a constructor function type. ==== tests/cases/compiler/classExtendsClauseClassMergedWithModuleNotReferingConstructor.ts (1 errors) ==== @@ -13,7 +13,7 @@ tests/cases/compiler/classExtendsClauseClassMergedWithModuleNotReferingConstruct var A = 1; class B extends A { ~ -!!! error TS2419: Type name 'A' in extends clause does not reference constructor function for 'A'. +!!! error TS2507: Base expression is not of a constructor function type. b: string; } } \ No newline at end of file diff --git a/tests/baselines/reference/classExtendsClauseClassNotReferringConstructor.errors.txt b/tests/baselines/reference/classExtendsClauseClassNotReferringConstructor.errors.txt index 7f8b6fb411b..448167d739d 100644 --- a/tests/baselines/reference/classExtendsClauseClassNotReferringConstructor.errors.txt +++ b/tests/baselines/reference/classExtendsClauseClassNotReferringConstructor.errors.txt @@ -1,4 +1,4 @@ -tests/cases/compiler/classExtendsClauseClassNotReferringConstructor.ts(4,21): error TS2419: Type name 'A' in extends clause does not reference constructor function for 'A'. +tests/cases/compiler/classExtendsClauseClassNotReferringConstructor.ts(4,21): error TS2507: Base expression is not of a constructor function type. ==== tests/cases/compiler/classExtendsClauseClassNotReferringConstructor.ts (1 errors) ==== @@ -7,6 +7,6 @@ tests/cases/compiler/classExtendsClauseClassNotReferringConstructor.ts(4,21): er var A = 1; class B extends A { b: string; } ~ -!!! error TS2419: Type name 'A' in extends clause does not reference constructor function for 'A'. +!!! error TS2507: Base expression is not of a constructor function type. } \ No newline at end of file diff --git a/tests/baselines/reference/classExtendsEveryObjectType.errors.txt b/tests/baselines/reference/classExtendsEveryObjectType.errors.txt index 75eced53139..e1f1c785bbc 100644 --- a/tests/baselines/reference/classExtendsEveryObjectType.errors.txt +++ b/tests/baselines/reference/classExtendsEveryObjectType.errors.txt @@ -1,40 +1,43 @@ -tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsEveryObjectType.ts(4,17): error TS2311: A class may only extend another class. -tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsEveryObjectType.ts(6,18): error TS9002: Only identifiers/qualified-names with optional type arguments are currently supported in a class 'extends' clauses. +tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsEveryObjectType.ts(4,17): error TS2304: Cannot find name 'I'. +tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsEveryObjectType.ts(6,18): error TS2507: Base expression is not of a constructor function type. +tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsEveryObjectType.ts(6,25): error TS2304: Cannot find name 'string'. tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsEveryObjectType.ts(6,31): error TS1005: ',' expected. -tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsEveryObjectType.ts(8,18): error TS2304: Cannot find name 'x'. -tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsEveryObjectType.ts(11,18): error TS2304: Cannot find name 'M'. -tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsEveryObjectType.ts(14,18): error TS2304: Cannot find name 'foo'. -tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsEveryObjectType.ts(16,18): error TS9002: Only identifiers/qualified-names with optional type arguments are currently supported in a class 'extends' clauses. +tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsEveryObjectType.ts(8,18): error TS2507: Base expression is not of a constructor function type. +tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsEveryObjectType.ts(11,18): error TS2507: Base expression is not of a constructor function type. +tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsEveryObjectType.ts(14,18): error TS2507: Base expression is not of a constructor function type. +tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsEveryObjectType.ts(16,18): error TS2507: Base expression is not of a constructor function type. -==== tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsEveryObjectType.ts (7 errors) ==== +==== tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsEveryObjectType.ts (8 errors) ==== interface I { foo: string; } class C extends I { } // error ~ -!!! error TS2311: A class may only extend another class. +!!! error TS2304: Cannot find name 'I'. class C2 extends { foo: string; } { } // error ~~~~~~~~~~~~~~~~ -!!! error TS9002: Only identifiers/qualified-names with optional type arguments are currently supported in a class 'extends' clauses. +!!! error TS2507: Base expression is not of a constructor function type. + ~~~~~~ +!!! error TS2304: Cannot find name 'string'. ~ !!! error TS1005: ',' expected. var x: { foo: string; } class C3 extends x { } // error ~ -!!! error TS2304: Cannot find name 'x'. +!!! error TS2507: Base expression is not of a constructor function type. module M { export var x = 1; } class C4 extends M { } // error ~ -!!! error TS2304: Cannot find name 'M'. +!!! error TS2507: Base expression is not of a constructor function type. function foo() { } class C5 extends foo { } // error ~~~ -!!! error TS2304: Cannot find name 'foo'. +!!! error TS2507: Base expression is not of a constructor function type. class C6 extends []{ } // error ~~ -!!! error TS9002: Only identifiers/qualified-names with optional type arguments are currently supported in a class 'extends' clauses. \ No newline at end of file +!!! error TS2507: Base expression is not of a constructor function type. \ No newline at end of file diff --git a/tests/baselines/reference/classExtendsEveryObjectType2.errors.txt b/tests/baselines/reference/classExtendsEveryObjectType2.errors.txt index 45a63030d00..650c4e4886e 100644 --- a/tests/baselines/reference/classExtendsEveryObjectType2.errors.txt +++ b/tests/baselines/reference/classExtendsEveryObjectType2.errors.txt @@ -1,15 +1,18 @@ -tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsEveryObjectType2.ts(1,18): error TS9002: Only identifiers/qualified-names with optional type arguments are currently supported in a class 'extends' clauses. +tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsEveryObjectType2.ts(1,18): error TS2507: Base expression is not of a constructor function type. +tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsEveryObjectType2.ts(1,25): error TS2304: Cannot find name 'string'. tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsEveryObjectType2.ts(1,31): error TS1005: ',' expected. -tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsEveryObjectType2.ts(3,18): error TS9002: Only identifiers/qualified-names with optional type arguments are currently supported in a class 'extends' clauses. +tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsEveryObjectType2.ts(3,18): error TS2507: Base expression is not of a constructor function type. -==== tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsEveryObjectType2.ts (3 errors) ==== +==== tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsEveryObjectType2.ts (4 errors) ==== class C2 extends { foo: string; } { } // error ~~~~~~~~~~~~~~~~ -!!! error TS9002: Only identifiers/qualified-names with optional type arguments are currently supported in a class 'extends' clauses. +!!! error TS2507: Base expression is not of a constructor function type. + ~~~~~~ +!!! error TS2304: Cannot find name 'string'. ~ !!! error TS1005: ',' expected. class C6 extends []{ } // error ~~ -!!! error TS9002: Only identifiers/qualified-names with optional type arguments are currently supported in a class 'extends' clauses. \ No newline at end of file +!!! error TS2507: Base expression is not of a constructor function type. \ No newline at end of file diff --git a/tests/baselines/reference/classExtendsInterface.errors.txt b/tests/baselines/reference/classExtendsInterface.errors.txt index 746f3c4bea0..2ecca6cf2cf 100644 --- a/tests/baselines/reference/classExtendsInterface.errors.txt +++ b/tests/baselines/reference/classExtendsInterface.errors.txt @@ -1,17 +1,17 @@ -tests/cases/compiler/classExtendsInterface.ts(2,17): error TS2311: A class may only extend another class. -tests/cases/compiler/classExtendsInterface.ts(6,21): error TS2311: A class may only extend another class. +tests/cases/compiler/classExtendsInterface.ts(2,17): error TS2304: Cannot find name 'Comparable'. +tests/cases/compiler/classExtendsInterface.ts(6,21): error TS2304: Cannot find name 'Comparable2'. ==== tests/cases/compiler/classExtendsInterface.ts (2 errors) ==== interface Comparable {} class A extends Comparable {} ~~~~~~~~~~ -!!! error TS2311: A class may only extend another class. +!!! error TS2304: Cannot find name 'Comparable'. class B implements Comparable {} interface Comparable2 {} class A2 extends Comparable2 {} - ~~~~~~~~~~~~~~ -!!! error TS2311: A class may only extend another class. + ~~~~~~~~~~~ +!!! error TS2304: Cannot find name 'Comparable2'. class B2 implements Comparable2 {} \ No newline at end of file diff --git a/tests/baselines/reference/classExtendsItself.errors.txt b/tests/baselines/reference/classExtendsItself.errors.txt index bd15ae22c12..9dd3bcc2202 100644 --- a/tests/baselines/reference/classExtendsItself.errors.txt +++ b/tests/baselines/reference/classExtendsItself.errors.txt @@ -1,17 +1,17 @@ -tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsItself.ts(1,7): error TS2310: Type 'C' recursively references itself as a base type. -tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsItself.ts(3,7): error TS2310: Type 'D' recursively references itself as a base type. -tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsItself.ts(5,7): error TS2310: Type 'E' recursively references itself as a base type. +tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsItself.ts(1,7): error TS2506: 'C' is referenced directly or indirectly in its own base expression. +tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsItself.ts(3,7): error TS2506: 'D' is referenced directly or indirectly in its own base expression. +tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsItself.ts(5,7): error TS2506: 'E' is referenced directly or indirectly in its own base expression. ==== tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsItself.ts (3 errors) ==== class C extends C { } // error ~ -!!! error TS2310: Type 'C' recursively references itself as a base type. +!!! error TS2506: 'C' is referenced directly or indirectly in its own base expression. class D extends D { } // error ~ -!!! error TS2310: Type 'D' recursively references itself as a base type. +!!! error TS2506: 'D' is referenced directly or indirectly in its own base expression. class E extends E { } // error ~ -!!! error TS2310: Type 'E' recursively references itself as a base type. \ No newline at end of file +!!! error TS2506: 'E' is referenced directly or indirectly in its own base expression. \ No newline at end of file diff --git a/tests/baselines/reference/classExtendsItselfIndirectly.errors.txt b/tests/baselines/reference/classExtendsItselfIndirectly.errors.txt index b39ef5b905f..c0f35f0388f 100644 --- a/tests/baselines/reference/classExtendsItselfIndirectly.errors.txt +++ b/tests/baselines/reference/classExtendsItselfIndirectly.errors.txt @@ -1,20 +1,32 @@ -tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsItselfIndirectly.ts(1,7): error TS2310: Type 'C' recursively references itself as a base type. -tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsItselfIndirectly.ts(7,7): error TS2310: Type 'C2' recursively references itself as a base type. +tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsItselfIndirectly.ts(1,7): error TS2506: 'C' is referenced directly or indirectly in its own base expression. +tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsItselfIndirectly.ts(3,7): error TS2506: 'D' is referenced directly or indirectly in its own base expression. +tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsItselfIndirectly.ts(5,7): error TS2506: 'E' is referenced directly or indirectly in its own base expression. +tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsItselfIndirectly.ts(7,7): error TS2506: 'C2' is referenced directly or indirectly in its own base expression. +tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsItselfIndirectly.ts(9,7): error TS2506: 'D2' is referenced directly or indirectly in its own base expression. +tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsItselfIndirectly.ts(11,7): error TS2506: 'E2' is referenced directly or indirectly in its own base expression. -==== tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsItselfIndirectly.ts (2 errors) ==== +==== tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsItselfIndirectly.ts (6 errors) ==== class C extends E { foo: string; } // error ~ -!!! error TS2310: Type 'C' recursively references itself as a base type. +!!! error TS2506: 'C' is referenced directly or indirectly in its own base expression. class D extends C { bar: string; } + ~ +!!! error TS2506: 'D' is referenced directly or indirectly in its own base expression. class E extends D { baz: number; } + ~ +!!! error TS2506: 'E' is referenced directly or indirectly in its own base expression. class C2 extends E2 { foo: T; } // error ~~ -!!! error TS2310: Type 'C2' recursively references itself as a base type. +!!! error TS2506: 'C2' is referenced directly or indirectly in its own base expression. class D2 extends C2 { bar: T; } + ~~ +!!! error TS2506: 'D2' is referenced directly or indirectly in its own base expression. - class E2 extends D2 { baz: T; } \ No newline at end of file + class E2 extends D2 { baz: T; } + ~~ +!!! error TS2506: 'E2' is referenced directly or indirectly in its own base expression. \ No newline at end of file diff --git a/tests/baselines/reference/classExtendsItselfIndirectly2.errors.txt b/tests/baselines/reference/classExtendsItselfIndirectly2.errors.txt index a61291b5aa9..061770f9b79 100644 --- a/tests/baselines/reference/classExtendsItselfIndirectly2.errors.txt +++ b/tests/baselines/reference/classExtendsItselfIndirectly2.errors.txt @@ -1,31 +1,43 @@ -tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsItselfIndirectly2.ts(1,7): error TS2310: Type 'C' recursively references itself as a base type. -tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsItselfIndirectly2.ts(13,11): error TS2310: Type 'C2' recursively references itself as a base type. +tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsItselfIndirectly2.ts(1,7): error TS2506: 'C' is referenced directly or indirectly in its own base expression. +tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsItselfIndirectly2.ts(4,18): error TS2506: 'D' is referenced directly or indirectly in its own base expression. +tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsItselfIndirectly2.ts(9,18): error TS2506: 'E' is referenced directly or indirectly in its own base expression. +tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsItselfIndirectly2.ts(13,11): error TS2506: 'C2' is referenced directly or indirectly in its own base expression. +tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsItselfIndirectly2.ts(16,22): error TS2506: 'D2' is referenced directly or indirectly in its own base expression. +tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsItselfIndirectly2.ts(20,22): error TS2506: 'E2' is referenced directly or indirectly in its own base expression. -==== tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsItselfIndirectly2.ts (2 errors) ==== +==== tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsItselfIndirectly2.ts (6 errors) ==== class C extends N.E { foo: string; } // error ~ -!!! error TS2310: Type 'C' recursively references itself as a base type. +!!! error TS2506: 'C' is referenced directly or indirectly in its own base expression. module M { export class D extends C { bar: string; } + ~ +!!! error TS2506: 'D' is referenced directly or indirectly in its own base expression. } module N { export class E extends M.D { baz: number; } + ~ +!!! error TS2506: 'E' is referenced directly or indirectly in its own base expression. } module O { class C2 extends Q.E2 { foo: T; } // error ~~ -!!! error TS2310: Type 'C2' recursively references itself as a base type. +!!! error TS2506: 'C2' is referenced directly or indirectly in its own base expression. module P { export class D2 extends C2 { bar: T; } + ~~ +!!! error TS2506: 'D2' is referenced directly or indirectly in its own base expression. } module Q { export class E2 extends P.D2 { baz: T; } + ~~ +!!! error TS2506: 'E2' is referenced directly or indirectly in its own base expression. } } \ No newline at end of file diff --git a/tests/baselines/reference/classExtendsItselfIndirectly3.errors.txt b/tests/baselines/reference/classExtendsItselfIndirectly3.errors.txt index 8430ec887b5..411ea4cb580 100644 --- a/tests/baselines/reference/classExtendsItselfIndirectly3.errors.txt +++ b/tests/baselines/reference/classExtendsItselfIndirectly3.errors.txt @@ -1,25 +1,37 @@ -tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsItselfIndirectly_file1.ts(1,7): error TS2310: Type 'C' recursively references itself as a base type. -tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsItselfIndirectly_file4.ts(1,7): error TS2310: Type 'C2' recursively references itself as a base type. +tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsItselfIndirectly_file1.ts(1,7): error TS2506: 'C' is referenced directly or indirectly in its own base expression. +tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsItselfIndirectly_file2.ts(1,7): error TS2506: 'D' is referenced directly or indirectly in its own base expression. +tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsItselfIndirectly_file3.ts(1,7): error TS2506: 'E' is referenced directly or indirectly in its own base expression. +tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsItselfIndirectly_file4.ts(1,7): error TS2506: 'C2' is referenced directly or indirectly in its own base expression. +tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsItselfIndirectly_file5.ts(1,7): error TS2506: 'D2' is referenced directly or indirectly in its own base expression. +tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsItselfIndirectly_file6.ts(1,7): error TS2506: 'E2' is referenced directly or indirectly in its own base expression. ==== tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsItselfIndirectly_file1.ts (1 errors) ==== class C extends E { foo: string; } // error ~ -!!! error TS2310: Type 'C' recursively references itself as a base type. +!!! error TS2506: 'C' is referenced directly or indirectly in its own base expression. -==== tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsItselfIndirectly_file2.ts (0 errors) ==== +==== tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsItselfIndirectly_file2.ts (1 errors) ==== class D extends C { bar: string; } + ~ +!!! error TS2506: 'D' is referenced directly or indirectly in its own base expression. -==== tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsItselfIndirectly_file3.ts (0 errors) ==== +==== tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsItselfIndirectly_file3.ts (1 errors) ==== class E extends D { baz: number; } + ~ +!!! error TS2506: 'E' is referenced directly or indirectly in its own base expression. ==== tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsItselfIndirectly_file4.ts (1 errors) ==== class C2 extends E2 { foo: T; } // error ~~ -!!! error TS2310: Type 'C2' recursively references itself as a base type. +!!! error TS2506: 'C2' is referenced directly or indirectly in its own base expression. -==== tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsItselfIndirectly_file5.ts (0 errors) ==== +==== tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsItselfIndirectly_file5.ts (1 errors) ==== class D2 extends C2 { bar: T; } + ~~ +!!! error TS2506: 'D2' is referenced directly or indirectly in its own base expression. -==== tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsItselfIndirectly_file6.ts (0 errors) ==== - class E2 extends D2 { baz: T; } \ No newline at end of file +==== tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsItselfIndirectly_file6.ts (1 errors) ==== + class E2 extends D2 { baz: T; } + ~~ +!!! error TS2506: 'E2' is referenced directly or indirectly in its own base expression. \ No newline at end of file diff --git a/tests/baselines/reference/classExtendsShadowedConstructorFunction.errors.txt b/tests/baselines/reference/classExtendsShadowedConstructorFunction.errors.txt index 782dd2a2dbc..475a980e4e6 100644 --- a/tests/baselines/reference/classExtendsShadowedConstructorFunction.errors.txt +++ b/tests/baselines/reference/classExtendsShadowedConstructorFunction.errors.txt @@ -1,4 +1,4 @@ -tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsShadowedConstructorFunction.ts(5,21): error TS2419: Type name 'C' in extends clause does not reference constructor function for 'C'. +tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsShadowedConstructorFunction.ts(5,21): error TS2507: Base expression is not of a constructor function type. ==== tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsShadowedConstructorFunction.ts (1 errors) ==== @@ -8,7 +8,7 @@ tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/cla var C = 1; class D extends C { // error, C must evaluate to constructor function ~ -!!! error TS2419: Type name 'C' in extends clause does not reference constructor function for 'C'. +!!! error TS2507: Base expression is not of a constructor function type. bar: string; } } \ No newline at end of file diff --git a/tests/baselines/reference/classExtendsValidConstructorFunction.errors.txt b/tests/baselines/reference/classExtendsValidConstructorFunction.errors.txt index ad2262819ed..6ebd818e547 100644 --- a/tests/baselines/reference/classExtendsValidConstructorFunction.errors.txt +++ b/tests/baselines/reference/classExtendsValidConstructorFunction.errors.txt @@ -1,4 +1,4 @@ -tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsValidConstructorFunction.ts(5,17): error TS2304: Cannot find name 'foo'. +tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsValidConstructorFunction.ts(5,17): error TS2507: Base expression is not of a constructor function type. ==== tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsValidConstructorFunction.ts (1 errors) ==== @@ -8,4 +8,4 @@ tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/cla class C extends foo { } // error, cannot extend it though ~~~ -!!! error TS2304: Cannot find name 'foo'. \ No newline at end of file +!!! error TS2507: Base expression is not of a constructor function type. \ No newline at end of file diff --git a/tests/baselines/reference/classInheritence.errors.txt b/tests/baselines/reference/classInheritence.errors.txt index 483812c6b5f..cba8c040d6e 100644 --- a/tests/baselines/reference/classInheritence.errors.txt +++ b/tests/baselines/reference/classInheritence.errors.txt @@ -1,8 +1,8 @@ -tests/cases/compiler/classInheritence.ts(2,7): error TS2310: Type 'A' recursively references itself as a base type. +tests/cases/compiler/classInheritence.ts(2,7): error TS2506: 'A' is referenced directly or indirectly in its own base expression. ==== tests/cases/compiler/classInheritence.ts (1 errors) ==== class B extends A { } class A extends A { } ~ -!!! error TS2310: Type 'A' recursively references itself as a base type. \ No newline at end of file +!!! error TS2506: 'A' is referenced directly or indirectly in its own base expression. \ No newline at end of file diff --git a/tests/baselines/reference/classUpdateTests.errors.txt b/tests/baselines/reference/classUpdateTests.errors.txt index e7f34fec546..a8c24dc63a2 100644 --- a/tests/baselines/reference/classUpdateTests.errors.txt +++ b/tests/baselines/reference/classUpdateTests.errors.txt @@ -1,7 +1,5 @@ tests/cases/compiler/classUpdateTests.ts(34,2): error TS2377: Constructors for derived classes must contain a 'super' call. tests/cases/compiler/classUpdateTests.ts(43,18): error TS2335: 'super' can only be referenced in a derived class. -tests/cases/compiler/classUpdateTests.ts(46,17): error TS2311: A class may only extend another class. -tests/cases/compiler/classUpdateTests.ts(47,18): error TS2335: 'super' can only be referenced in a derived class. tests/cases/compiler/classUpdateTests.ts(57,2): error TS2376: A 'super' call must be the first statement in the constructor when a class contains initialized properties or has parameter properties. tests/cases/compiler/classUpdateTests.ts(63,7): error TS2415: Class 'L' incorrectly extends base class 'G'. Property 'p1' is private in type 'L' but not in type 'G'. @@ -20,7 +18,7 @@ tests/cases/compiler/classUpdateTests.ts(111,15): error TS1005: ';' expected. tests/cases/compiler/classUpdateTests.ts(113,1): error TS1128: Declaration or statement expected. -==== tests/cases/compiler/classUpdateTests.ts (18 errors) ==== +==== tests/cases/compiler/classUpdateTests.ts (16 errors) ==== // // test codegen for instance properties // @@ -71,11 +69,7 @@ tests/cases/compiler/classUpdateTests.ts(113,1): error TS1128: Declaration or st } class I extends Object { - ~~~~~~ -!!! error TS2311: A class may only extend another class. constructor() { super(); } // ERROR - no super call allowed - ~~~~~ -!!! error TS2335: 'super' can only be referenced in a derived class. } class J extends G { diff --git a/tests/baselines/reference/complicatedGenericRecursiveBaseClassReference.errors.txt b/tests/baselines/reference/complicatedGenericRecursiveBaseClassReference.errors.txt index 204a7d4c21a..a70eb0e5e2c 100644 --- a/tests/baselines/reference/complicatedGenericRecursiveBaseClassReference.errors.txt +++ b/tests/baselines/reference/complicatedGenericRecursiveBaseClassReference.errors.txt @@ -1,11 +1,11 @@ -tests/cases/compiler/complicatedGenericRecursiveBaseClassReference.ts(1,7): error TS2310: Type 'S18' recursively references itself as a base type. +tests/cases/compiler/complicatedGenericRecursiveBaseClassReference.ts(1,7): error TS2506: 'S18' is referenced directly or indirectly in its own base expression. tests/cases/compiler/complicatedGenericRecursiveBaseClassReference.ts(4,2): error TS2346: Supplied parameters do not match any signature of call target. ==== tests/cases/compiler/complicatedGenericRecursiveBaseClassReference.ts (2 errors) ==== class S18 extends S18 ~~~ -!!! error TS2310: Type 'S18' recursively references itself as a base type. +!!! error TS2506: 'S18' is referenced directly or indirectly in its own base expression. { } (new S18(123)).S18 = 0; diff --git a/tests/baselines/reference/constraints0.errors.txt b/tests/baselines/reference/constraints0.errors.txt index 217a7408fbd..39cc7654e01 100644 --- a/tests/baselines/reference/constraints0.errors.txt +++ b/tests/baselines/reference/constraints0.errors.txt @@ -1,4 +1,4 @@ -tests/cases/compiler/constraints0.ts(14,9): error TS2344: Type 'B' does not satisfy the constraint 'A'. +tests/cases/compiler/constraints0.ts(14,11): error TS2344: Type 'B' does not satisfy the constraint 'A'. Property 'a' is missing in type 'B'. @@ -17,7 +17,7 @@ tests/cases/compiler/constraints0.ts(14,9): error TS2344: Type 'B' does not sati var v1: C; // should work var v2: C; // should not work - ~~~~ + ~ !!! error TS2344: Type 'B' does not satisfy the constraint 'A'. !!! error TS2344: Property 'a' is missing in type 'B'. diff --git a/tests/baselines/reference/extBaseClass2.errors.txt b/tests/baselines/reference/extBaseClass2.errors.txt index 10c406b6ba0..b4d243c7ef2 100644 --- a/tests/baselines/reference/extBaseClass2.errors.txt +++ b/tests/baselines/reference/extBaseClass2.errors.txt @@ -1,4 +1,4 @@ -tests/cases/compiler/extBaseClass2.ts(2,31): error TS2305: Module 'M' has no exported member 'B'. +tests/cases/compiler/extBaseClass2.ts(2,31): error TS2339: Property 'B' does not exist on type 'typeof M'. tests/cases/compiler/extBaseClass2.ts(7,29): error TS2304: Cannot find name 'B'. @@ -6,7 +6,7 @@ tests/cases/compiler/extBaseClass2.ts(7,29): error TS2304: Cannot find name 'B'. module N { export class C4 extends M.B { ~ -!!! error TS2305: Module 'M' has no exported member 'B'. +!!! error TS2339: Property 'B' does not exist on type 'typeof M'. } } diff --git a/tests/baselines/reference/extendNonClassSymbol1.errors.txt b/tests/baselines/reference/extendNonClassSymbol1.errors.txt deleted file mode 100644 index 587ac3a5f04..00000000000 --- a/tests/baselines/reference/extendNonClassSymbol1.errors.txt +++ /dev/null @@ -1,9 +0,0 @@ -tests/cases/compiler/extendNonClassSymbol1.ts(3,17): error TS2304: Cannot find name 'x'. - - -==== tests/cases/compiler/extendNonClassSymbol1.ts (1 errors) ==== - class A { foo() { } } - var x = A; - class C extends x { } // error, could not find symbol xs - ~ -!!! error TS2304: Cannot find name 'x'. \ No newline at end of file diff --git a/tests/baselines/reference/extendNonClassSymbol2.errors.txt b/tests/baselines/reference/extendNonClassSymbol2.errors.txt index 1b54474ac39..882a8b447f8 100644 --- a/tests/baselines/reference/extendNonClassSymbol2.errors.txt +++ b/tests/baselines/reference/extendNonClassSymbol2.errors.txt @@ -1,4 +1,4 @@ -tests/cases/compiler/extendNonClassSymbol2.ts(5,17): error TS2304: Cannot find name 'Foo'. +tests/cases/compiler/extendNonClassSymbol2.ts(5,17): error TS2507: Base expression is not of a constructor function type. ==== tests/cases/compiler/extendNonClassSymbol2.ts (1 errors) ==== @@ -8,4 +8,4 @@ tests/cases/compiler/extendNonClassSymbol2.ts(5,17): error TS2304: Cannot find n var x = new Foo(); // legal, considered a constructor function class C extends Foo {} // error, could not find symbol Foo ~~~ -!!! error TS2304: Cannot find name 'Foo'. \ No newline at end of file +!!! error TS2507: Base expression is not of a constructor function type. \ No newline at end of file diff --git a/tests/baselines/reference/generatorTypeCheck40.errors.txt b/tests/baselines/reference/generatorTypeCheck40.errors.txt index 9d9676e5d28..6341ec9ae0a 100644 --- a/tests/baselines/reference/generatorTypeCheck40.errors.txt +++ b/tests/baselines/reference/generatorTypeCheck40.errors.txt @@ -1,9 +1,12 @@ -tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck40.ts(2,21): error TS9002: Only identifiers/qualified-names with optional type arguments are currently supported in a class 'extends' clauses. +tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck40.ts(2,21): error TS2507: Base expression is not of a constructor function type. +tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck40.ts(2,22): error TS1163: A 'yield' expression is only allowed in a generator body. -==== tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck40.ts (1 errors) ==== +==== tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck40.ts (2 errors) ==== function* g() { class C extends (yield 0) { } ~~~~~~~~~ -!!! error TS9002: Only identifiers/qualified-names with optional type arguments are currently supported in a class 'extends' clauses. +!!! error TS2507: Base expression is not of a constructor function type. + ~~~~~ +!!! error TS1163: A 'yield' expression is only allowed in a generator body. } \ No newline at end of file diff --git a/tests/baselines/reference/generatorTypeCheck60.errors.txt b/tests/baselines/reference/generatorTypeCheck60.errors.txt index d8e5d640bb1..4d230a81b5b 100644 --- a/tests/baselines/reference/generatorTypeCheck60.errors.txt +++ b/tests/baselines/reference/generatorTypeCheck60.errors.txt @@ -1,9 +1,12 @@ -tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck60.ts(2,21): error TS9002: Only identifiers/qualified-names with optional type arguments are currently supported in a class 'extends' clauses. +tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck60.ts(2,21): error TS2507: Base expression is not of a constructor function type. +tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck60.ts(2,22): error TS1163: A 'yield' expression is only allowed in a generator body. -==== tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck60.ts (1 errors) ==== +==== tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck60.ts (2 errors) ==== function* g() { class C extends (yield) {}; ~~~~~~~ -!!! error TS9002: Only identifiers/qualified-names with optional type arguments are currently supported in a class 'extends' clauses. +!!! error TS2507: Base expression is not of a constructor function type. + ~~~~~ +!!! error TS1163: A 'yield' expression is only allowed in a generator body. } \ No newline at end of file diff --git a/tests/baselines/reference/genericTypeReferenceWithoutTypeArgument.d.errors.txt b/tests/baselines/reference/genericTypeReferenceWithoutTypeArgument.d.errors.txt index 5ae71fa2a89..2f6db48bf2f 100644 --- a/tests/baselines/reference/genericTypeReferenceWithoutTypeArgument.d.errors.txt +++ b/tests/baselines/reference/genericTypeReferenceWithoutTypeArgument.d.errors.txt @@ -8,7 +8,7 @@ tests/cases/conformance/types/specifyingTypes/typeReferences/genericTypeReferenc tests/cases/conformance/types/specifyingTypes/typeReferences/genericTypeReferenceWithoutTypeArgument.d.ts(14,23): error TS2314: Generic type 'C' requires 1 type argument(s). tests/cases/conformance/types/specifyingTypes/typeReferences/genericTypeReferenceWithoutTypeArgument.d.ts(14,27): error TS2314: Generic type 'C' requires 1 type argument(s). tests/cases/conformance/types/specifyingTypes/typeReferences/genericTypeReferenceWithoutTypeArgument.d.ts(16,25): error TS2314: Generic type 'C' requires 1 type argument(s). -tests/cases/conformance/types/specifyingTypes/typeReferences/genericTypeReferenceWithoutTypeArgument.d.ts(22,28): error TS2305: Module 'M' has no exported member 'C'. +tests/cases/conformance/types/specifyingTypes/typeReferences/genericTypeReferenceWithoutTypeArgument.d.ts(22,28): error TS2339: Property 'C' does not exist on type 'typeof M'. tests/cases/conformance/types/specifyingTypes/typeReferences/genericTypeReferenceWithoutTypeArgument.d.ts(23,28): error TS2314: Generic type 'E' requires 1 type argument(s). tests/cases/conformance/types/specifyingTypes/typeReferences/genericTypeReferenceWithoutTypeArgument.d.ts(25,30): error TS2314: Generic type 'C' requires 1 type argument(s). tests/cases/conformance/types/specifyingTypes/typeReferences/genericTypeReferenceWithoutTypeArgument.d.ts(26,30): error TS2314: Generic type 'E' requires 1 type argument(s). @@ -58,7 +58,7 @@ tests/cases/conformance/types/specifyingTypes/typeReferences/genericTypeReferenc declare class D2 extends M.C { } ~ -!!! error TS2305: Module 'M' has no exported member 'C'. +!!! error TS2339: Property 'C' does not exist on type 'typeof M'. declare class D3 { } ~~~ !!! error TS2314: Generic type 'E' requires 1 type argument(s). diff --git a/tests/baselines/reference/genericTypeReferenceWithoutTypeArgument2.errors.txt b/tests/baselines/reference/genericTypeReferenceWithoutTypeArgument2.errors.txt index 2949ce52ce0..e590ad42a7d 100644 --- a/tests/baselines/reference/genericTypeReferenceWithoutTypeArgument2.errors.txt +++ b/tests/baselines/reference/genericTypeReferenceWithoutTypeArgument2.errors.txt @@ -13,9 +13,9 @@ tests/cases/conformance/types/specifyingTypes/typeReferences/genericTypeReferenc tests/cases/conformance/types/specifyingTypes/typeReferences/genericTypeReferenceWithoutTypeArgument2.ts(18,23): error TS2314: Generic type 'I' requires 1 type argument(s). tests/cases/conformance/types/specifyingTypes/typeReferences/genericTypeReferenceWithoutTypeArgument2.ts(18,27): error TS2314: Generic type 'I' requires 1 type argument(s). tests/cases/conformance/types/specifyingTypes/typeReferences/genericTypeReferenceWithoutTypeArgument2.ts(18,38): error TS2314: Generic type 'I' requires 1 type argument(s). -tests/cases/conformance/types/specifyingTypes/typeReferences/genericTypeReferenceWithoutTypeArgument2.ts(20,17): error TS2314: Generic type 'I' requires 1 type argument(s). +tests/cases/conformance/types/specifyingTypes/typeReferences/genericTypeReferenceWithoutTypeArgument2.ts(20,17): error TS2304: Cannot find name 'I'. tests/cases/conformance/types/specifyingTypes/typeReferences/genericTypeReferenceWithoutTypeArgument2.ts(23,21): error TS2314: Generic type 'I' requires 1 type argument(s). -tests/cases/conformance/types/specifyingTypes/typeReferences/genericTypeReferenceWithoutTypeArgument2.ts(29,20): error TS2305: Module 'M' has no exported member 'C'. +tests/cases/conformance/types/specifyingTypes/typeReferences/genericTypeReferenceWithoutTypeArgument2.ts(29,18): error TS2304: Cannot find name 'M'. tests/cases/conformance/types/specifyingTypes/typeReferences/genericTypeReferenceWithoutTypeArgument2.ts(30,24): error TS2314: Generic type 'E' requires 1 type argument(s). tests/cases/conformance/types/specifyingTypes/typeReferences/genericTypeReferenceWithoutTypeArgument2.ts(31,24): error TS2305: Module 'M' has no exported member 'C'. tests/cases/conformance/types/specifyingTypes/typeReferences/genericTypeReferenceWithoutTypeArgument2.ts(33,22): error TS2314: Generic type 'I' requires 1 type argument(s). @@ -76,7 +76,7 @@ tests/cases/conformance/types/specifyingTypes/typeReferences/genericTypeReferenc class D extends I { ~ -!!! error TS2314: Generic type 'I' requires 1 type argument(s). +!!! error TS2304: Cannot find name 'I'. } interface U extends I {} @@ -88,8 +88,8 @@ tests/cases/conformance/types/specifyingTypes/typeReferences/genericTypeReferenc } class D2 extends M.C { } - ~ -!!! error TS2305: Module 'M' has no exported member 'C'. + ~ +!!! error TS2304: Cannot find name 'M'. interface D3 { } ~~~ !!! error TS2314: Generic type 'E' requires 1 type argument(s). diff --git a/tests/baselines/reference/genericTypeReferenceWithoutTypeArgument3.errors.txt b/tests/baselines/reference/genericTypeReferenceWithoutTypeArgument3.errors.txt index c0e41374527..95857c925be 100644 --- a/tests/baselines/reference/genericTypeReferenceWithoutTypeArgument3.errors.txt +++ b/tests/baselines/reference/genericTypeReferenceWithoutTypeArgument3.errors.txt @@ -8,7 +8,7 @@ tests/cases/conformance/types/specifyingTypes/typeReferences/genericTypeReferenc tests/cases/conformance/types/specifyingTypes/typeReferences/genericTypeReferenceWithoutTypeArgument3.ts(14,23): error TS2314: Generic type 'C' requires 1 type argument(s). tests/cases/conformance/types/specifyingTypes/typeReferences/genericTypeReferenceWithoutTypeArgument3.ts(14,27): error TS2314: Generic type 'C' requires 1 type argument(s). tests/cases/conformance/types/specifyingTypes/typeReferences/genericTypeReferenceWithoutTypeArgument3.ts(16,25): error TS2314: Generic type 'C' requires 1 type argument(s). -tests/cases/conformance/types/specifyingTypes/typeReferences/genericTypeReferenceWithoutTypeArgument3.ts(22,28): error TS2305: Module 'M' has no exported member 'C'. +tests/cases/conformance/types/specifyingTypes/typeReferences/genericTypeReferenceWithoutTypeArgument3.ts(22,28): error TS2339: Property 'C' does not exist on type 'typeof M'. tests/cases/conformance/types/specifyingTypes/typeReferences/genericTypeReferenceWithoutTypeArgument3.ts(23,28): error TS2314: Generic type 'E' requires 1 type argument(s). tests/cases/conformance/types/specifyingTypes/typeReferences/genericTypeReferenceWithoutTypeArgument3.ts(25,30): error TS2314: Generic type 'C' requires 1 type argument(s). tests/cases/conformance/types/specifyingTypes/typeReferences/genericTypeReferenceWithoutTypeArgument3.ts(26,30): error TS2314: Generic type 'E' requires 1 type argument(s). @@ -58,7 +58,7 @@ tests/cases/conformance/types/specifyingTypes/typeReferences/genericTypeReferenc declare class D2 extends M.C { } ~ -!!! error TS2305: Module 'M' has no exported member 'C'. +!!! error TS2339: Property 'C' does not exist on type 'typeof M'. declare class D3 { } ~~~ !!! error TS2314: Generic type 'E' requires 1 type argument(s). diff --git a/tests/baselines/reference/generics1.errors.txt b/tests/baselines/reference/generics1.errors.txt index 81d250a2ef4..6279c0dcd63 100644 --- a/tests/baselines/reference/generics1.errors.txt +++ b/tests/baselines/reference/generics1.errors.txt @@ -1,4 +1,4 @@ -tests/cases/compiler/generics1.ts(10,9): error TS2344: Type 'A' does not satisfy the constraint 'B'. +tests/cases/compiler/generics1.ts(10,14): error TS2344: Type 'A' does not satisfy the constraint 'B'. Property 'b' is missing in type 'A'. tests/cases/compiler/generics1.ts(13,9): error TS2314: Generic type 'G' requires 2 type argument(s). tests/cases/compiler/generics1.ts(14,9): error TS2314: Generic type 'G' requires 2 type argument(s). @@ -15,7 +15,7 @@ tests/cases/compiler/generics1.ts(14,9): error TS2314: Generic type 'G' re var v1: G; // Ok var v2: G<{ a: string }, C>; // Ok, equivalent to G var v3: G; // Error, A not valid argument for U - ~~~~~~~ + ~ !!! error TS2344: Type 'A' does not satisfy the constraint 'B'. !!! error TS2344: Property 'b' is missing in type 'A'. var v4: G, C>; // Ok diff --git a/tests/baselines/reference/generics2.errors.txt b/tests/baselines/reference/generics2.errors.txt index a0380eee753..d44bc7baad8 100644 --- a/tests/baselines/reference/generics2.errors.txt +++ b/tests/baselines/reference/generics2.errors.txt @@ -1,4 +1,4 @@ -tests/cases/compiler/generics2.ts(17,9): error TS2344: Type 'A' does not satisfy the constraint 'B'. +tests/cases/compiler/generics2.ts(17,14): error TS2344: Type 'A' does not satisfy the constraint 'B'. Property 'b' is missing in type 'A'. tests/cases/compiler/generics2.ts(20,9): error TS2314: Generic type 'G' requires 2 type argument(s). tests/cases/compiler/generics2.ts(21,9): error TS2314: Generic type 'G' requires 2 type argument(s). @@ -22,7 +22,7 @@ tests/cases/compiler/generics2.ts(21,9): error TS2314: Generic type 'G' re var v2: G<{ a: string }, C>; // Ok, equivalent to G var v3: G; // Error, A not valid argument for U - ~~~~~~~ + ~ !!! error TS2344: Type 'A' does not satisfy the constraint 'B'. !!! error TS2344: Property 'b' is missing in type 'A'. var v4: G, C>; // Ok diff --git a/tests/baselines/reference/generics5.errors.txt b/tests/baselines/reference/generics5.errors.txt index 17aeea63df2..fd21a705436 100644 --- a/tests/baselines/reference/generics5.errors.txt +++ b/tests/baselines/reference/generics5.errors.txt @@ -1,4 +1,4 @@ -tests/cases/compiler/generics5.ts(10,9): error TS2344: Type 'A' does not satisfy the constraint 'B'. +tests/cases/compiler/generics5.ts(10,14): error TS2344: Type 'A' does not satisfy the constraint 'B'. Property 'b' is missing in type 'A'. @@ -13,7 +13,7 @@ tests/cases/compiler/generics5.ts(10,9): error TS2344: Type 'A' does not satisfy } var v3: G; // Error, A not valid argument for U - ~~~~~~~ + ~ !!! error TS2344: Type 'A' does not satisfy the constraint 'B'. !!! error TS2344: Property 'b' is missing in type 'A'. diff --git a/tests/baselines/reference/importAsBaseClass.errors.txt b/tests/baselines/reference/importAsBaseClass.errors.txt index f09eb55561b..4b923ea2323 100644 --- a/tests/baselines/reference/importAsBaseClass.errors.txt +++ b/tests/baselines/reference/importAsBaseClass.errors.txt @@ -1,11 +1,11 @@ -tests/cases/compiler/importAsBaseClass_1.ts(2,21): error TS2304: Cannot find name 'Greeter'. +tests/cases/compiler/importAsBaseClass_1.ts(2,21): error TS2507: Base expression is not of a constructor function type. ==== tests/cases/compiler/importAsBaseClass_1.ts (1 errors) ==== import Greeter = require("importAsBaseClass_0"); class Hello extends Greeter { } ~~~~~~~ -!!! error TS2304: Cannot find name 'Greeter'. +!!! error TS2507: Base expression is not of a constructor function type. ==== tests/cases/compiler/importAsBaseClass_0.ts (0 errors) ==== export class Greeter { diff --git a/tests/baselines/reference/importAsBaseClass.js b/tests/baselines/reference/importAsBaseClass.js index 24f7e0477d6..b40fd563733 100644 --- a/tests/baselines/reference/importAsBaseClass.js +++ b/tests/baselines/reference/importAsBaseClass.js @@ -25,6 +25,7 @@ var __extends = (this && this.__extends) || function (d, b) { __.prototype = b.prototype; d.prototype = new __(); }; +var Greeter = require("importAsBaseClass_0"); var Hello = (function (_super) { __extends(Hello, _super); function Hello() { diff --git a/tests/baselines/reference/indirectSelfReference.errors.txt b/tests/baselines/reference/indirectSelfReference.errors.txt index e7c5a00d421..3f7d3d47f12 100644 --- a/tests/baselines/reference/indirectSelfReference.errors.txt +++ b/tests/baselines/reference/indirectSelfReference.errors.txt @@ -1,8 +1,11 @@ -tests/cases/compiler/indirectSelfReference.ts(1,7): error TS2310: Type 'a' recursively references itself as a base type. +tests/cases/compiler/indirectSelfReference.ts(1,7): error TS2506: 'a' is referenced directly or indirectly in its own base expression. +tests/cases/compiler/indirectSelfReference.ts(2,7): error TS2506: 'b' is referenced directly or indirectly in its own base expression. -==== tests/cases/compiler/indirectSelfReference.ts (1 errors) ==== +==== tests/cases/compiler/indirectSelfReference.ts (2 errors) ==== class a extends b{ } ~ -!!! error TS2310: Type 'a' recursively references itself as a base type. - class b extends a{ } \ No newline at end of file +!!! error TS2506: 'a' is referenced directly or indirectly in its own base expression. + class b extends a{ } + ~ +!!! error TS2506: 'b' is referenced directly or indirectly in its own base expression. \ No newline at end of file diff --git a/tests/baselines/reference/indirectSelfReferenceGeneric.errors.txt b/tests/baselines/reference/indirectSelfReferenceGeneric.errors.txt index 765112f0e99..5a6aeed5de1 100644 --- a/tests/baselines/reference/indirectSelfReferenceGeneric.errors.txt +++ b/tests/baselines/reference/indirectSelfReferenceGeneric.errors.txt @@ -1,8 +1,11 @@ -tests/cases/compiler/indirectSelfReferenceGeneric.ts(1,7): error TS2310: Type 'a' recursively references itself as a base type. +tests/cases/compiler/indirectSelfReferenceGeneric.ts(1,7): error TS2506: 'a' is referenced directly or indirectly in its own base expression. +tests/cases/compiler/indirectSelfReferenceGeneric.ts(2,7): error TS2506: 'b' is referenced directly or indirectly in its own base expression. -==== tests/cases/compiler/indirectSelfReferenceGeneric.ts (1 errors) ==== +==== tests/cases/compiler/indirectSelfReferenceGeneric.ts (2 errors) ==== class a extends b { } ~ -!!! error TS2310: Type 'a' recursively references itself as a base type. - class b extends a { } \ No newline at end of file +!!! error TS2506: 'a' is referenced directly or indirectly in its own base expression. + class b extends a { } + ~ +!!! error TS2506: 'b' is referenced directly or indirectly in its own base expression. \ No newline at end of file diff --git a/tests/baselines/reference/inheritFromGenericTypeParameter.errors.txt b/tests/baselines/reference/inheritFromGenericTypeParameter.errors.txt index a9b3cb4b686..c043e37575c 100644 --- a/tests/baselines/reference/inheritFromGenericTypeParameter.errors.txt +++ b/tests/baselines/reference/inheritFromGenericTypeParameter.errors.txt @@ -1,11 +1,11 @@ -tests/cases/compiler/inheritFromGenericTypeParameter.ts(1,20): error TS2311: A class may only extend another class. +tests/cases/compiler/inheritFromGenericTypeParameter.ts(1,20): error TS2304: Cannot find name 'T'. tests/cases/compiler/inheritFromGenericTypeParameter.ts(2,24): error TS2312: An interface may only extend a class or another interface. ==== tests/cases/compiler/inheritFromGenericTypeParameter.ts (2 errors) ==== class C extends T { } ~ -!!! error TS2311: A class may only extend another class. +!!! error TS2304: Cannot find name 'T'. interface I extends T { } ~ !!! error TS2312: An interface may only extend a class or another interface. \ No newline at end of file diff --git a/tests/baselines/reference/overloadresolutionWithConstraintCheckingDeferred.errors.txt b/tests/baselines/reference/overloadresolutionWithConstraintCheckingDeferred.errors.txt index 35837d3233f..45c9f99b691 100644 --- a/tests/baselines/reference/overloadresolutionWithConstraintCheckingDeferred.errors.txt +++ b/tests/baselines/reference/overloadresolutionWithConstraintCheckingDeferred.errors.txt @@ -7,7 +7,7 @@ tests/cases/compiler/overloadresolutionWithConstraintCheckingDeferred.ts(18,27): Types of parameters 'x' and 'x' are incompatible. Type 'D' is not assignable to type 'B'. Property 'x' is missing in type 'D'. -tests/cases/compiler/overloadresolutionWithConstraintCheckingDeferred.ts(19,12): error TS2344: Type 'D' does not satisfy the constraint 'A'. +tests/cases/compiler/overloadresolutionWithConstraintCheckingDeferred.ts(19,14): error TS2344: Type 'D' does not satisfy the constraint 'A'. ==== tests/cases/compiler/overloadresolutionWithConstraintCheckingDeferred.ts (6 errors) ==== @@ -41,7 +41,7 @@ tests/cases/compiler/overloadresolutionWithConstraintCheckingDeferred.ts(19,12): ~~~~~~~~~~~~~~~~~~~~~~ var y: G; // error that D does not satisfy constraint, y is of type G, entire call to foo is an error ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - ~~~~~~~~~~~ + ~~~~~~~~ !!! error TS2344: Type 'D' does not satisfy the constraint 'A'. return y; ~~~~~~~~~~~~~ diff --git a/tests/baselines/reference/qualifiedName_entity-name-resolution-does-not-affect-class-heritage.errors.txt b/tests/baselines/reference/qualifiedName_entity-name-resolution-does-not-affect-class-heritage.errors.txt index 21bf243dfcb..3c67ff44fd3 100644 --- a/tests/baselines/reference/qualifiedName_entity-name-resolution-does-not-affect-class-heritage.errors.txt +++ b/tests/baselines/reference/qualifiedName_entity-name-resolution-does-not-affect-class-heritage.errors.txt @@ -1,4 +1,4 @@ -tests/cases/compiler/qualifiedName_entity-name-resolution-does-not-affect-class-heritage.ts(5,26): error TS2305: Module 'Alpha' has no exported member 'x'. +tests/cases/compiler/qualifiedName_entity-name-resolution-does-not-affect-class-heritage.ts(5,20): error TS2507: Base expression is not of a constructor function type. ==== tests/cases/compiler/qualifiedName_entity-name-resolution-does-not-affect-class-heritage.ts (1 errors) ==== @@ -7,6 +7,6 @@ tests/cases/compiler/qualifiedName_entity-name-resolution-does-not-affect-class- } class Beta extends Alpha.x { - ~ -!!! error TS2305: Module 'Alpha' has no exported member 'x'. + ~~~~~~~ +!!! error TS2507: Base expression is not of a constructor function type. } \ No newline at end of file diff --git a/tests/baselines/reference/recursiveBaseCheck.errors.txt b/tests/baselines/reference/recursiveBaseCheck.errors.txt index 06915b6b430..0ada6976a83 100644 --- a/tests/baselines/reference/recursiveBaseCheck.errors.txt +++ b/tests/baselines/reference/recursiveBaseCheck.errors.txt @@ -1,19 +1,31 @@ -tests/cases/compiler/recursiveBaseCheck.ts(2,11): error TS2310: Type 'C' recursively references itself as a base type. +tests/cases/compiler/recursiveBaseCheck.ts(2,11): error TS2506: 'C' is referenced directly or indirectly in its own base expression. +tests/cases/compiler/recursiveBaseCheck.ts(4,18): error TS2506: 'B' is referenced directly or indirectly in its own base expression. +tests/cases/compiler/recursiveBaseCheck.ts(6,18): error TS2506: 'A' is referenced directly or indirectly in its own base expression. +tests/cases/compiler/recursiveBaseCheck.ts(8,18): error TS2506: 'AmChart' is referenced directly or indirectly in its own base expression. +tests/cases/compiler/recursiveBaseCheck.ts(10,18): error TS2506: 'D' is referenced directly or indirectly in its own base expression. -==== tests/cases/compiler/recursiveBaseCheck.ts (1 errors) ==== +==== tests/cases/compiler/recursiveBaseCheck.ts (5 errors) ==== declare module Module { class C extends D { ~ -!!! error TS2310: Type 'C' recursively references itself as a base type. +!!! error TS2506: 'C' is referenced directly or indirectly in its own base expression. } export class B extends Module.C { + ~ +!!! error TS2506: 'B' is referenced directly or indirectly in its own base expression. } export class A extends Module.B { + ~ +!!! error TS2506: 'A' is referenced directly or indirectly in its own base expression. } export class AmChart extends Module.A { + ~~~~~~~ +!!! error TS2506: 'AmChart' is referenced directly or indirectly in its own base expression. } export class D extends AmChart { + ~ +!!! error TS2506: 'D' is referenced directly or indirectly in its own base expression. } export class E extends Module.D { } diff --git a/tests/baselines/reference/recursiveBaseCheck2.errors.txt b/tests/baselines/reference/recursiveBaseCheck2.errors.txt index 1a39f811912..31eb1104003 100644 --- a/tests/baselines/reference/recursiveBaseCheck2.errors.txt +++ b/tests/baselines/reference/recursiveBaseCheck2.errors.txt @@ -1,13 +1,16 @@ -tests/cases/compiler/recursiveBaseCheck2.ts(2,18): error TS2310: Type 'b2CircleShape' recursively references itself as a base type. +tests/cases/compiler/recursiveBaseCheck2.ts(2,18): error TS2506: 'b2CircleShape' is referenced directly or indirectly in its own base expression. +tests/cases/compiler/recursiveBaseCheck2.ts(4,18): error TS2506: 'b2Shape' is referenced directly or indirectly in its own base expression. -==== tests/cases/compiler/recursiveBaseCheck2.ts (1 errors) ==== +==== tests/cases/compiler/recursiveBaseCheck2.ts (2 errors) ==== declare module Box2D.Collision.Shapes { export class b2CircleShape extends b2Shape { ~~~~~~~~~~~~~ -!!! error TS2310: Type 'b2CircleShape' recursively references itself as a base type. +!!! error TS2506: 'b2CircleShape' is referenced directly or indirectly in its own base expression. } export class b2Shape extends Box2D.Collision.Shapes.b2CircleShape { + ~~~~~~~ +!!! error TS2506: 'b2Shape' is referenced directly or indirectly in its own base expression. } } declare module Box2D.Dynamics { diff --git a/tests/baselines/reference/recursiveBaseCheck3.errors.txt b/tests/baselines/reference/recursiveBaseCheck3.errors.txt index fe955b420ee..97f7cadc3d6 100644 --- a/tests/baselines/reference/recursiveBaseCheck3.errors.txt +++ b/tests/baselines/reference/recursiveBaseCheck3.errors.txt @@ -1,12 +1,15 @@ -tests/cases/compiler/recursiveBaseCheck3.ts(1,7): error TS2310: Type 'A' recursively references itself as a base type. +tests/cases/compiler/recursiveBaseCheck3.ts(1,7): error TS2506: 'A' is referenced directly or indirectly in its own base expression. +tests/cases/compiler/recursiveBaseCheck3.ts(2,7): error TS2506: 'C' is referenced directly or indirectly in its own base expression. tests/cases/compiler/recursiveBaseCheck3.ts(4,9): error TS2339: Property 'blah' does not exist on type 'C<{}>'. -==== tests/cases/compiler/recursiveBaseCheck3.ts (2 errors) ==== +==== tests/cases/compiler/recursiveBaseCheck3.ts (3 errors) ==== class A extends C { } ~ -!!! error TS2310: Type 'A' recursively references itself as a base type. +!!! error TS2506: 'A' is referenced directly or indirectly in its own base expression. class C extends A { } + ~ +!!! error TS2506: 'C' is referenced directly or indirectly in its own base expression. (new C).blah; ~~~~ diff --git a/tests/baselines/reference/recursiveBaseCheck4.errors.txt b/tests/baselines/reference/recursiveBaseCheck4.errors.txt index 4417b998871..5616523d14e 100644 --- a/tests/baselines/reference/recursiveBaseCheck4.errors.txt +++ b/tests/baselines/reference/recursiveBaseCheck4.errors.txt @@ -1,11 +1,11 @@ -tests/cases/compiler/recursiveBaseCheck4.ts(1,7): error TS2310: Type 'M' recursively references itself as a base type. +tests/cases/compiler/recursiveBaseCheck4.ts(1,7): error TS2506: 'M' is referenced directly or indirectly in its own base expression. tests/cases/compiler/recursiveBaseCheck4.ts(2,9): error TS2339: Property 'blah' does not exist on type 'M<{}>'. ==== tests/cases/compiler/recursiveBaseCheck4.ts (2 errors) ==== class M extends M { } ~ -!!! error TS2310: Type 'M' recursively references itself as a base type. +!!! error TS2506: 'M' is referenced directly or indirectly in its own base expression. (new M).blah; ~~~~ !!! error TS2339: Property 'blah' does not exist on type 'M<{}>'. \ No newline at end of file diff --git a/tests/baselines/reference/recursiveBaseCheck6.errors.txt b/tests/baselines/reference/recursiveBaseCheck6.errors.txt index 280f50b7a77..6d453da425f 100644 --- a/tests/baselines/reference/recursiveBaseCheck6.errors.txt +++ b/tests/baselines/reference/recursiveBaseCheck6.errors.txt @@ -1,11 +1,11 @@ -tests/cases/compiler/recursiveBaseCheck6.ts(1,7): error TS2310: Type 'S18' recursively references itself as a base type. +tests/cases/compiler/recursiveBaseCheck6.ts(1,7): error TS2506: 'S18' is referenced directly or indirectly in its own base expression. tests/cases/compiler/recursiveBaseCheck6.ts(2,13): error TS2339: Property 'blah' does not exist on type 'S18<{}>'. ==== tests/cases/compiler/recursiveBaseCheck6.ts (2 errors) ==== class S18 extends S18<{ S19: A; }>{ } ~~~ -!!! error TS2310: Type 'S18' recursively references itself as a base type. +!!! error TS2506: 'S18' is referenced directly or indirectly in its own base expression. (new S18()).blah; ~~~~ !!! error TS2339: Property 'blah' does not exist on type 'S18<{}>'. \ No newline at end of file diff --git a/tests/baselines/reference/strictModeReservedWordInClassDeclaration.errors.txt b/tests/baselines/reference/strictModeReservedWordInClassDeclaration.errors.txt index 43222495b9f..ebbd197eece 100644 --- a/tests/baselines/reference/strictModeReservedWordInClassDeclaration.errors.txt +++ b/tests/baselines/reference/strictModeReservedWordInClassDeclaration.errors.txt @@ -20,11 +20,10 @@ tests/cases/compiler/strictModeReservedWordInClassDeclaration.ts(26,21): error T tests/cases/compiler/strictModeReservedWordInClassDeclaration.ts(26,21): error TS2503: Cannot find namespace 'public'. tests/cases/compiler/strictModeReservedWordInClassDeclaration.ts(27,17): error TS1213: Identifier expected. 'package' is a reserved word in strict mode. Class definitions are automatically in strict mode. tests/cases/compiler/strictModeReservedWordInClassDeclaration.ts(27,17): error TS2304: Cannot find name 'package'. -tests/cases/compiler/strictModeReservedWordInClassDeclaration.ts(28,17): error TS1213: Identifier expected. 'package' is a reserved word in strict mode. Class definitions are automatically in strict mode. -tests/cases/compiler/strictModeReservedWordInClassDeclaration.ts(28,17): error TS2503: Cannot find namespace 'package'. +tests/cases/compiler/strictModeReservedWordInClassDeclaration.ts(28,17): error TS2304: Cannot find name 'package'. -==== tests/cases/compiler/strictModeReservedWordInClassDeclaration.ts (24 errors) ==== +==== tests/cases/compiler/strictModeReservedWordInClassDeclaration.ts (23 errors) ==== interface public { } class Foo { @@ -98,6 +97,4 @@ tests/cases/compiler/strictModeReservedWordInClassDeclaration.ts(28,17): error T !!! error TS2304: Cannot find name 'package'. class H extends package.A { } ~~~~~~~ -!!! error TS1213: Identifier expected. 'package' is a reserved word in strict mode. Class definitions are automatically in strict mode. - ~~~~~~~ -!!! error TS2503: Cannot find namespace 'package'. \ No newline at end of file +!!! error TS2304: Cannot find name 'package'. \ No newline at end of file diff --git a/tests/baselines/reference/subtypingWithNumericIndexer2.errors.txt b/tests/baselines/reference/subtypingWithNumericIndexer2.errors.txt index 01b581b7306..318b64d9331 100644 --- a/tests/baselines/reference/subtypingWithNumericIndexer2.errors.txt +++ b/tests/baselines/reference/subtypingWithNumericIndexer2.errors.txt @@ -2,7 +2,7 @@ tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingW Index signatures are incompatible. Type 'Base' is not assignable to type 'Derived'. Property 'bar' is missing in type 'Base'. -tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithNumericIndexer2.ts(24,25): error TS2344: Type 'Base' does not satisfy the constraint 'Derived'. +tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithNumericIndexer2.ts(24,27): error TS2344: Type 'Base' does not satisfy the constraint 'Derived'. tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithNumericIndexer2.ts(32,15): error TS2430: Interface 'B3' incorrectly extends interface 'A'. Index signatures are incompatible. Type 'Base' is not assignable to type 'T'. @@ -44,7 +44,7 @@ tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingW } interface B extends A { - ~~~~~~~ + ~~~~ !!! error TS2344: Type 'Base' does not satisfy the constraint 'Derived'. [x: number]: Derived; // error } diff --git a/tests/baselines/reference/subtypingWithNumericIndexer3.errors.txt b/tests/baselines/reference/subtypingWithNumericIndexer3.errors.txt index 4da8bc0290a..6f2684ae93b 100644 --- a/tests/baselines/reference/subtypingWithNumericIndexer3.errors.txt +++ b/tests/baselines/reference/subtypingWithNumericIndexer3.errors.txt @@ -2,7 +2,7 @@ tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingW Index signatures are incompatible. Type 'Base' is not assignable to type 'Derived'. Property 'bar' is missing in type 'Base'. -tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithNumericIndexer3.ts(24,21): error TS2344: Type 'Base' does not satisfy the constraint 'Derived'. +tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithNumericIndexer3.ts(24,23): error TS2344: Type 'Base' does not satisfy the constraint 'Derived'. tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithNumericIndexer3.ts(32,11): error TS2415: Class 'B3' incorrectly extends base class 'A'. Index signatures are incompatible. Type 'Base' is not assignable to type 'T'. @@ -44,7 +44,7 @@ tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingW } class B extends A { - ~~~~~~~ + ~~~~ !!! error TS2344: Type 'Base' does not satisfy the constraint 'Derived'. [x: number]: Derived; // error } diff --git a/tests/baselines/reference/subtypingWithNumericIndexer4.errors.txt b/tests/baselines/reference/subtypingWithNumericIndexer4.errors.txt index f3c9cc25a10..5dd39e0ad63 100644 --- a/tests/baselines/reference/subtypingWithNumericIndexer4.errors.txt +++ b/tests/baselines/reference/subtypingWithNumericIndexer4.errors.txt @@ -6,7 +6,7 @@ tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingW Index signatures are incompatible. Type 'string' is not assignable to type 'Base'. Property 'foo' is missing in type 'String'. -tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithNumericIndexer4.ts(20,21): error TS2344: Type 'Base' does not satisfy the constraint 'Derived'. +tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithNumericIndexer4.ts(20,23): error TS2344: Type 'Base' does not satisfy the constraint 'Derived'. Property 'bar' is missing in type 'Base'. tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithNumericIndexer4.ts(24,11): error TS2415: Class 'B3' incorrectly extends base class 'A'. Index signatures are incompatible. @@ -44,7 +44,7 @@ tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingW !!! error TS2415: Index signatures are incompatible. !!! error TS2415: Type 'string' is not assignable to type 'Base'. !!! error TS2415: Property 'foo' is missing in type 'String'. - ~~~~~~~ + ~~~~ !!! error TS2344: Type 'Base' does not satisfy the constraint 'Derived'. !!! error TS2344: Property 'bar' is missing in type 'Base'. [x: number]: string; // error diff --git a/tests/baselines/reference/subtypingWithStringIndexer2.errors.txt b/tests/baselines/reference/subtypingWithStringIndexer2.errors.txt index cfe8f2b8e1d..82f6229b20c 100644 --- a/tests/baselines/reference/subtypingWithStringIndexer2.errors.txt +++ b/tests/baselines/reference/subtypingWithStringIndexer2.errors.txt @@ -2,7 +2,7 @@ tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingW Index signatures are incompatible. Type 'Base' is not assignable to type 'Derived'. Property 'bar' is missing in type 'Base'. -tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithStringIndexer2.ts(24,25): error TS2344: Type 'Base' does not satisfy the constraint 'Derived'. +tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithStringIndexer2.ts(24,27): error TS2344: Type 'Base' does not satisfy the constraint 'Derived'. tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithStringIndexer2.ts(32,15): error TS2430: Interface 'B3' incorrectly extends interface 'A'. Index signatures are incompatible. Type 'Base' is not assignable to type 'T'. @@ -44,7 +44,7 @@ tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingW } interface B extends A { - ~~~~~~~ + ~~~~ !!! error TS2344: Type 'Base' does not satisfy the constraint 'Derived'. [x: string]: Derived; // error } diff --git a/tests/baselines/reference/subtypingWithStringIndexer3.errors.txt b/tests/baselines/reference/subtypingWithStringIndexer3.errors.txt index 91c9f7fd47e..205ecf780cb 100644 --- a/tests/baselines/reference/subtypingWithStringIndexer3.errors.txt +++ b/tests/baselines/reference/subtypingWithStringIndexer3.errors.txt @@ -2,7 +2,7 @@ tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingW Index signatures are incompatible. Type 'Base' is not assignable to type 'Derived'. Property 'bar' is missing in type 'Base'. -tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithStringIndexer3.ts(24,21): error TS2344: Type 'Base' does not satisfy the constraint 'Derived'. +tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithStringIndexer3.ts(24,23): error TS2344: Type 'Base' does not satisfy the constraint 'Derived'. tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithStringIndexer3.ts(32,11): error TS2415: Class 'B3' incorrectly extends base class 'A'. Index signatures are incompatible. Type 'Base' is not assignable to type 'T'. @@ -44,7 +44,7 @@ tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingW } class B extends A { - ~~~~~~~ + ~~~~ !!! error TS2344: Type 'Base' does not satisfy the constraint 'Derived'. [x: string]: Derived; // error } diff --git a/tests/baselines/reference/subtypingWithStringIndexer4.errors.txt b/tests/baselines/reference/subtypingWithStringIndexer4.errors.txt index 6df716791c2..4aa889444e5 100644 --- a/tests/baselines/reference/subtypingWithStringIndexer4.errors.txt +++ b/tests/baselines/reference/subtypingWithStringIndexer4.errors.txt @@ -6,7 +6,7 @@ tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingW Index signatures are incompatible. Type 'string' is not assignable to type 'Base'. Property 'foo' is missing in type 'String'. -tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithStringIndexer4.ts(20,21): error TS2344: Type 'Base' does not satisfy the constraint 'Derived'. +tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithStringIndexer4.ts(20,23): error TS2344: Type 'Base' does not satisfy the constraint 'Derived'. Property 'bar' is missing in type 'Base'. tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithStringIndexer4.ts(24,11): error TS2415: Class 'B3' incorrectly extends base class 'A'. Index signatures are incompatible. @@ -44,7 +44,7 @@ tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingW !!! error TS2415: Index signatures are incompatible. !!! error TS2415: Type 'string' is not assignable to type 'Base'. !!! error TS2415: Property 'foo' is missing in type 'String'. - ~~~~~~~ + ~~~~ !!! error TS2344: Type 'Base' does not satisfy the constraint 'Derived'. !!! error TS2344: Property 'bar' is missing in type 'Base'. [x: string]: string; // error diff --git a/tests/baselines/reference/thisInInvalidContexts.errors.txt b/tests/baselines/reference/thisInInvalidContexts.errors.txt index 055e0770dea..9cb554ab5df 100644 --- a/tests/baselines/reference/thisInInvalidContexts.errors.txt +++ b/tests/baselines/reference/thisInInvalidContexts.errors.txt @@ -1,7 +1,7 @@ tests/cases/conformance/expressions/thisKeyword/thisInInvalidContexts.ts(3,16): error TS2334: 'this' cannot be referenced in a static property initializer. tests/cases/conformance/expressions/thisKeyword/thisInInvalidContexts.ts(22,15): error TS2332: 'this' cannot be referenced in current location. tests/cases/conformance/expressions/thisKeyword/thisInInvalidContexts.ts(28,13): error TS2331: 'this' cannot be referenced in a module or namespace body. -tests/cases/conformance/expressions/thisKeyword/thisInInvalidContexts.ts(38,25): error TS9002: Only identifiers/qualified-names with optional type arguments are currently supported in a class 'extends' clauses. +tests/cases/conformance/expressions/thisKeyword/thisInInvalidContexts.ts(38,25): error TS2507: Base expression is not of a constructor function type. tests/cases/conformance/expressions/thisKeyword/thisInInvalidContexts.ts(44,9): error TS2332: 'this' cannot be referenced in current location. tests/cases/conformance/expressions/thisKeyword/thisInInvalidContexts.ts(45,9): error TS2332: 'this' cannot be referenced in current location. @@ -52,7 +52,7 @@ tests/cases/conformance/expressions/thisKeyword/thisInInvalidContexts.ts(45,9): class ErrClass3 extends this { ~~~~ -!!! error TS9002: Only identifiers/qualified-names with optional type arguments are currently supported in a class 'extends' clauses. +!!! error TS2507: Base expression is not of a constructor function type. } diff --git a/tests/baselines/reference/thisInInvalidContextsExternalModule.errors.txt b/tests/baselines/reference/thisInInvalidContextsExternalModule.errors.txt index 03c494cad45..96fab807f5e 100644 --- a/tests/baselines/reference/thisInInvalidContextsExternalModule.errors.txt +++ b/tests/baselines/reference/thisInInvalidContextsExternalModule.errors.txt @@ -1,7 +1,7 @@ tests/cases/conformance/expressions/thisKeyword/thisInInvalidContextsExternalModule.ts(3,16): error TS2334: 'this' cannot be referenced in a static property initializer. tests/cases/conformance/expressions/thisKeyword/thisInInvalidContextsExternalModule.ts(22,15): error TS2332: 'this' cannot be referenced in current location. tests/cases/conformance/expressions/thisKeyword/thisInInvalidContextsExternalModule.ts(28,13): error TS2331: 'this' cannot be referenced in a module or namespace body. -tests/cases/conformance/expressions/thisKeyword/thisInInvalidContextsExternalModule.ts(38,25): error TS9002: Only identifiers/qualified-names with optional type arguments are currently supported in a class 'extends' clauses. +tests/cases/conformance/expressions/thisKeyword/thisInInvalidContextsExternalModule.ts(38,25): error TS2507: Base expression is not of a constructor function type. tests/cases/conformance/expressions/thisKeyword/thisInInvalidContextsExternalModule.ts(44,9): error TS2332: 'this' cannot be referenced in current location. tests/cases/conformance/expressions/thisKeyword/thisInInvalidContextsExternalModule.ts(45,9): error TS2332: 'this' cannot be referenced in current location. tests/cases/conformance/expressions/thisKeyword/thisInInvalidContextsExternalModule.ts(48,1): error TS1148: Cannot compile modules unless the '--module' flag is provided. @@ -53,7 +53,7 @@ tests/cases/conformance/expressions/thisKeyword/thisInInvalidContextsExternalMod class ErrClass3 extends this { ~~~~ -!!! error TS9002: Only identifiers/qualified-names with optional type arguments are currently supported in a class 'extends' clauses. +!!! error TS2507: Base expression is not of a constructor function type. } diff --git a/tests/baselines/reference/typeParameterAsBaseClass.errors.txt b/tests/baselines/reference/typeParameterAsBaseClass.errors.txt index 5602bf69f57..dec7f7f2a4a 100644 --- a/tests/baselines/reference/typeParameterAsBaseClass.errors.txt +++ b/tests/baselines/reference/typeParameterAsBaseClass.errors.txt @@ -1,11 +1,11 @@ -tests/cases/compiler/typeParameterAsBaseClass.ts(1,20): error TS2311: A class may only extend another class. +tests/cases/compiler/typeParameterAsBaseClass.ts(1,20): error TS2304: Cannot find name 'T'. tests/cases/compiler/typeParameterAsBaseClass.ts(2,24): error TS2422: A class may only implement another class or interface. ==== tests/cases/compiler/typeParameterAsBaseClass.ts (2 errors) ==== class C extends T {} ~ -!!! error TS2311: A class may only extend another class. +!!! error TS2304: Cannot find name 'T'. class C2 implements T {} ~ !!! error TS2422: A class may only implement another class or interface. \ No newline at end of file diff --git a/tests/baselines/reference/typeParameterAsBaseType.errors.txt b/tests/baselines/reference/typeParameterAsBaseType.errors.txt index b945dcdd987..835b2369948 100644 --- a/tests/baselines/reference/typeParameterAsBaseType.errors.txt +++ b/tests/baselines/reference/typeParameterAsBaseType.errors.txt @@ -1,5 +1,5 @@ -tests/cases/conformance/types/typeParameters/typeParameterAsBaseType.ts(4,20): error TS2311: A class may only extend another class. -tests/cases/conformance/types/typeParameters/typeParameterAsBaseType.ts(5,24): error TS2311: A class may only extend another class. +tests/cases/conformance/types/typeParameters/typeParameterAsBaseType.ts(4,20): error TS2304: Cannot find name 'T'. +tests/cases/conformance/types/typeParameters/typeParameterAsBaseType.ts(5,24): error TS2304: Cannot find name 'U'. tests/cases/conformance/types/typeParameters/typeParameterAsBaseType.ts(7,24): error TS2312: An interface may only extend a class or another interface. tests/cases/conformance/types/typeParameters/typeParameterAsBaseType.ts(8,28): error TS2312: An interface may only extend a class or another interface. @@ -10,10 +10,10 @@ tests/cases/conformance/types/typeParameters/typeParameterAsBaseType.ts(8,28): e class C extends T { } ~ -!!! error TS2311: A class may only extend another class. +!!! error TS2304: Cannot find name 'T'. class C2 extends U { } ~ -!!! error TS2311: A class may only extend another class. +!!! error TS2304: Cannot find name 'U'. interface I extends T { } ~ diff --git a/tests/baselines/reference/undeclaredBase.errors.txt b/tests/baselines/reference/undeclaredBase.errors.txt index 5a6d838284c..25d550572d4 100644 --- a/tests/baselines/reference/undeclaredBase.errors.txt +++ b/tests/baselines/reference/undeclaredBase.errors.txt @@ -1,9 +1,9 @@ -tests/cases/compiler/undeclaredBase.ts(1,37): error TS2305: Module 'M' has no exported member 'I'. +tests/cases/compiler/undeclaredBase.ts(1,37): error TS2339: Property 'I' does not exist on type 'typeof M'. ==== tests/cases/compiler/undeclaredBase.ts (1 errors) ==== module M { export class C extends M.I { } } ~ -!!! error TS2305: Module 'M' has no exported member 'I'. +!!! error TS2339: Property 'I' does not exist on type 'typeof M'. \ No newline at end of file diff --git a/tests/baselines/reference/untypedFunctionCallsWithTypeParameters1.errors.txt b/tests/baselines/reference/untypedFunctionCallsWithTypeParameters1.errors.txt index 624d53f95d3..c6cd96578b4 100644 --- a/tests/baselines/reference/untypedFunctionCallsWithTypeParameters1.errors.txt +++ b/tests/baselines/reference/untypedFunctionCallsWithTypeParameters1.errors.txt @@ -4,14 +4,13 @@ tests/cases/compiler/untypedFunctionCallsWithTypeParameters1.ts(8,10): error TS2 tests/cases/compiler/untypedFunctionCallsWithTypeParameters1.ts(10,7): error TS2420: Class 'C' incorrectly implements interface 'Function'. Property 'apply' is missing in type 'C'. tests/cases/compiler/untypedFunctionCallsWithTypeParameters1.ts(18,10): error TS2349: Cannot invoke an expression whose type lacks a call signature. -tests/cases/compiler/untypedFunctionCallsWithTypeParameters1.ts(20,18): error TS2311: A class may only extend another class. -tests/cases/compiler/untypedFunctionCallsWithTypeParameters1.ts(22,10): error TS2349: Cannot invoke an expression whose type lacks a call signature. +tests/cases/compiler/untypedFunctionCallsWithTypeParameters1.ts(22,10): error TS2347: Untyped function calls may not accept type arguments. tests/cases/compiler/untypedFunctionCallsWithTypeParameters1.ts(28,10): error TS2346: Supplied parameters do not match any signature of call target. tests/cases/compiler/untypedFunctionCallsWithTypeParameters1.ts(35,1): error TS2346: Supplied parameters do not match any signature of call target. tests/cases/compiler/untypedFunctionCallsWithTypeParameters1.ts(41,1): error TS2346: Supplied parameters do not match any signature of call target. -==== tests/cases/compiler/untypedFunctionCallsWithTypeParameters1.ts (10 errors) ==== +==== tests/cases/compiler/untypedFunctionCallsWithTypeParameters1.ts (9 errors) ==== // none of these function calls should be allowed var x = function () { return; }; var r1 = x(); @@ -43,12 +42,10 @@ tests/cases/compiler/untypedFunctionCallsWithTypeParameters1.ts(41,1): error TS2 !!! error TS2349: Cannot invoke an expression whose type lacks a call signature. class C2 extends Function { } // error - ~~~~~~~~ -!!! error TS2311: A class may only extend another class. var c3: C2; var r5 = c3(); // error ~~~~~~~~~~~~ -!!! error TS2349: Cannot invoke an expression whose type lacks a call signature. +!!! error TS2347: Untyped function calls may not accept type arguments. interface I { (number): number; From cc81cc77f902cb986a38911f20d0ab0b17a9ceb3 Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Mon, 15 Jun 2015 15:44:43 -0700 Subject: [PATCH 04/17] Check that base constructor return types are identical Treat class extends clause as expression position in services.ts --- src/compiler/checker.ts | 17 +++++++++++++---- .../diagnosticInformationMap.generated.ts | 1 + src/compiler/diagnosticMessages.json | 4 ++++ src/compiler/utilities.ts | 13 ++++++++++--- src/services/services.ts | 3 ++- 5 files changed, 30 insertions(+), 8 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 13235f64b9e..8395fc04626 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -2642,7 +2642,7 @@ module ts { return type.baseConstructorType = unknownType; } if (baseConstructorType !== unknownType && baseConstructorType !== nullType && !isConstructorType(baseConstructorType)) { - error(baseTypeNode, Diagnostics.Base_expression_is_not_of_a_constructor_function_type); + error(baseTypeNode.expression, Diagnostics.Base_expression_is_not_of_a_constructor_function_type); return type.baseConstructorType = unknownType; } type.baseConstructorType = baseConstructorType; @@ -2680,7 +2680,7 @@ module ts { else { let constructors = getInstantiatedConstructorsForTypeArguments(baseContructorType, baseTypeNode.typeArguments); if (!constructors.length) { - error(baseTypeNode, Diagnostics.No_base_constructor_has_the_specified_number_of_type_arguments); + error(baseTypeNode.expression, Diagnostics.No_base_constructor_has_the_specified_number_of_type_arguments); return; } baseType = getReturnTypeOfSignature(constructors[0]); @@ -2689,7 +2689,7 @@ module ts { return; } if (!(getTargetType(baseType).flags & (TypeFlags.Class | TypeFlags.Interface))) { - error(baseTypeNode, Diagnostics.Base_constructor_does_not_return_a_class_or_interface_type); + error(baseTypeNode.expression, Diagnostics.Base_constructor_does_not_return_a_class_or_interface_type); return; } if (type === baseType || hasBaseType(baseType, type)) { @@ -10638,7 +10638,6 @@ module ts { let baseTypeNode = getClassExtendsHeritageClauseElement(node); if (baseTypeNode) { emitExtends = emitExtends || !isInAmbientContext(node); - // !!! checkExpressionWithTypeArguments(baseTypeNode); let baseTypes = getBaseTypes(type); if (baseTypes.length && produceDiagnostics) { let baseType = baseTypes[0]; @@ -10650,6 +10649,12 @@ module ts { checkTypeAssignableTo(type, baseType, node.name || node, Diagnostics.Class_0_incorrectly_extends_base_class_1); checkTypeAssignableTo(staticType, getTypeWithoutSignatures(staticBaseType), node.name || node, Diagnostics.Class_static_side_0_incorrectly_extends_base_class_static_side_1); + if (!(staticBaseType.symbol && staticBaseType.symbol.flags & SymbolFlags.Class)) { + let constructors = getInstantiatedConstructorsForTypeArguments(staticBaseType, baseTypeNode.typeArguments); + if (forEach(constructors, sig => getReturnTypeOfSignature(sig) !== baseType)) { + error(baseTypeNode.expression, Diagnostics.Base_constructors_must_all_have_the_same_return_type); + } + } checkKindsOfPropertyMemberOverrides(type, baseType); } } @@ -11997,6 +12002,10 @@ module ts { return unknownType; } + if (isClassExtendsExpressionWithTypeArguments(node)) { + return getBaseTypes(getDeclaredTypeOfSymbol(getSymbolOfNode(node.parent.parent)))[0]; + } + if (isTypeNode(node)) { return getTypeFromTypeNode(node); } diff --git a/src/compiler/diagnosticInformationMap.generated.ts b/src/compiler/diagnosticInformationMap.generated.ts index 3c75f388a3e..7d61a4bb6cd 100644 --- a/src/compiler/diagnosticInformationMap.generated.ts +++ b/src/compiler/diagnosticInformationMap.generated.ts @@ -383,6 +383,7 @@ module ts { Base_expression_is_not_of_a_constructor_function_type: { code: 2507, category: DiagnosticCategory.Error, key: "Base expression is not of a constructor function type." }, No_base_constructor_has_the_specified_number_of_type_arguments: { code: 2508, category: DiagnosticCategory.Error, key: "No base constructor has the specified number of type arguments." }, Base_constructor_does_not_return_a_class_or_interface_type: { code: 2509, category: DiagnosticCategory.Error, key: "Base constructor does not return a class or interface type." }, + Base_constructors_must_all_have_the_same_return_type: { code: 2510, category: DiagnosticCategory.Error, key: "Base constructors must all have the same return type." }, Import_declaration_0_is_using_private_name_1: { code: 4000, category: DiagnosticCategory.Error, key: "Import declaration '{0}' is using private name '{1}'." }, Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: { code: 4002, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of exported class has or is using private name '{1}'." }, Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1: { code: 4004, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of exported interface has or is using private name '{1}'." }, diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index db062b759f3..89171ca1753 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -1521,6 +1521,10 @@ "category": "Error", "code": 2509 }, + "Base constructors must all have the same return type.": { + "category": "Error", + "code": 2510 + }, "Import declaration '{0}' is using private name '{1}'.": { "category": "Error", diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index 6c0943f22fd..799f9efb44d 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -426,7 +426,7 @@ module ts { // Specialized signatures can have string literals as their parameters' type names return node.parent.kind === SyntaxKind.Parameter; case SyntaxKind.ExpressionWithTypeArguments: - return true; + return !isClassExtendsExpressionWithTypeArguments(node); // Identifiers and qualified names may be type nodes, depending on their context. Climb // above them to find the lowest container @@ -460,7 +460,7 @@ module ts { } switch (parent.kind) { case SyntaxKind.ExpressionWithTypeArguments: - return true; + return !isClassExtendsExpressionWithTypeArguments(parent); case SyntaxKind.TypeParameter: return node === (parent).constraint; case SyntaxKind.PropertyDeclaration: @@ -872,7 +872,6 @@ module ts { while (node.parent.kind === SyntaxKind.QualifiedName) { node = node.parent; } - return node.parent.kind === SyntaxKind.TypeQuery; case SyntaxKind.Identifier: if (node.parent.kind === SyntaxKind.TypeQuery) { @@ -920,6 +919,8 @@ module ts { return node === (parent).expression; case SyntaxKind.Decorator: return true; + case SyntaxKind.ExpressionWithTypeArguments: + return isClassExtendsExpressionWithTypeArguments(parent); default: if (isExpression(parent)) { return true; @@ -1878,6 +1879,12 @@ module ts { return token >= SyntaxKind.FirstAssignment && token <= SyntaxKind.LastAssignment; } + export function isClassExtendsExpressionWithTypeArguments(node: Node): boolean { + return node.kind === SyntaxKind.ExpressionWithTypeArguments && + (node.parent).token === SyntaxKind.ExtendsKeyword && + node.parent.parent.kind === SyntaxKind.ClassDeclaration; + } + // Returns false if this heritage clause element's expression contains something unsupported // (i.e. not a name or dotted name). export function isSupportedExpressionWithTypeArguments(node: ExpressionWithTypeArguments): boolean { diff --git a/src/services/services.ts b/src/services/services.ts index 5f030bf320e..0ed67f322ac 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -5811,7 +5811,8 @@ module ts { node = node.parent; } - return node.parent.kind === SyntaxKind.TypeReference || node.parent.kind === SyntaxKind.ExpressionWithTypeArguments; + return node.parent.kind === SyntaxKind.TypeReference || + (node.parent.kind === SyntaxKind.ExpressionWithTypeArguments && !isClassExtendsExpressionWithTypeArguments(node.parent)); } function isNamespaceReference(node: Node): boolean { From 367e257928b9c7a80f02e859c1843ba9de5ce228 Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Mon, 15 Jun 2015 15:46:29 -0700 Subject: [PATCH 05/17] Accepting new baselines --- ...assHeritageListMemberTypeAnnotations.types | 2 +- ...essibleTypeInTypeParameterConstraint.types | 2 +- .../accessOverriddenBaseClassMember1.types | 2 +- .../aliasUsageInAccessorsOfClass.types | 4 +- .../reference/aliasUsageInArray.types | 4 +- .../aliasUsageInFunctionExpression.types | 4 +- .../aliasUsageInGenericFunction.types | 4 +- .../aliasUsageInIndexerOfClass.types | 4 +- .../reference/aliasUsageInObjectLiteral.types | 4 +- .../reference/aliasUsageInOrExpression.types | 4 +- ...asUsageInTypeArgumentOfExtendsClause.types | 6 +- .../reference/aliasUsageInVarAssignment.types | 4 +- .../ambientClassDeclarationWithExtends.types | 2 +- ...oduleWithClassDeclarationWithExtends.types | 2 +- .../ambiguousOverloadResolution.types | 2 +- .../reference/arrayBestCommonTypes.types | 4 +- .../reference/arrayLiteralTypeInference.types | 4 +- tests/baselines/reference/arrayLiterals.types | 4 +- .../arrayLiteralsWithRecursiveGenerics.types | 2 +- .../assignmentCompatWithCallSignatures3.types | 6 +- .../assignmentCompatWithCallSignatures5.types | 6 +- .../assignmentCompatWithCallSignatures6.types | 6 +- ...gnmentCompatWithConstructSignatures3.types | 6 +- ...gnmentCompatWithConstructSignatures5.types | 6 +- ...gnmentCompatWithConstructSignatures6.types | 6 +- .../baseIndexSignatureResolution.types | 2 +- .../reference/baseTypeOrderChecking.types | 4 +- .../baseTypeWrappingInstantiationChain.types | 4 +- ...stCommonTypeOfConditionalExpressions.types | 4 +- .../reference/bestCommonTypeOfTuple2.types | 4 +- ...SignatureAssignabilityInInheritance2.types | 6 +- ...SignatureAssignabilityInInheritance4.types | 6 +- ...SignatureAssignabilityInInheritance5.types | 6 +- ...SignatureAssignabilityInInheritance6.types | 6 +- .../baselines/reference/callWithSpread.types | 2 +- .../reference/callWithSpreadES6.types | 2 +- .../reference/captureThisInSuperCall.types | 2 +- .../reference/checkForObjectTooStrict.types | 6 +- .../reference/circularImportAlias.types | 4 +- ...sConstructorParametersAccessibility3.types | 2 +- ...rationMergedInModuleWithContinuation.types | 4 +- .../classDoesNotDependOnBaseTypes.types | 2 +- .../reference/classExtendingClass.types | 4 +- .../classExtendingQualifiedName2.types | 4 +- .../reference/classImplementsClass3.types | 2 +- tests/baselines/reference/classOrder2.types | 2 +- tests/baselines/reference/classOrderBug.types | 2 +- .../reference/classSideInheritance2.types | 2 +- .../classWithProtectedProperty.types | 2 +- .../reference/commentOnAmbientClass1.types | 2 +- .../reference/commentOnAmbientModule.types | 4 +- .../reference/commentsInheritance.types | 4 +- ...mparisonOperatorWithIdenticalObjects.types | 4 +- ...atorWithSubtypeObjectOnCallSignature.types | 2 +- ...hSubtypeObjectOnConstructorSignature.types | 2 +- ...torWithSubtypeObjectOnIndexSignature.types | 2 +- ...ypeObjectOnInstantiatedCallSignature.types | 2 +- ...ctOnInstantiatedConstructorSignature.types | 2 +- ...nOperatorWithSubtypeObjectOnProperty.types | 4 +- .../reference/complexClassRelationships.types | 2 +- .../computedPropertyNames25_ES5.types | 2 +- .../computedPropertyNames25_ES6.types | 2 +- .../computedPropertyNames28_ES5.types | 2 +- .../computedPropertyNames28_ES6.types | 2 +- .../computedPropertyNames31_ES5.types | 2 +- .../computedPropertyNames31_ES6.types | 2 +- .../conditionalOperatorWithIdenticalBCT.types | 4 +- .../reference/constantOverloadFunction.types | 6 +- ...raintCheckInGenericBaseTypeReference.types | 2 +- ...SignatureAssignabilityInInheritance2.types | 6 +- ...SignatureAssignabilityInInheritance4.types | 6 +- ...SignatureAssignabilityInInheritance5.types | 6 +- ...SignatureAssignabilityInInheritance6.types | 6 +- .../baselines/reference/constructorArgs.types | 2 +- ...orFunctionTypeIsAssignableToBaseType.types | 4 +- ...rFunctionTypeIsAssignableToBaseType2.types | 4 +- .../constructorHasPrototypeProperty.types | 4 +- .../reference/constructorOverloads2.types | 2 +- .../contextualTypingArrayOfLambdas.types | 4 +- ...textualTypingOfConditionalExpression.types | 4 +- .../declFileAliasUseBeforeDeclaration2.types | 2 +- ...clFileForFunctionTypeAsTypeParameter.types | 2 +- ...GenericClassWithGenericExtendedClass.types | 2 +- .../reference/declFileGenericType.types | 4 +- .../reference/declFileGenericType2.types | 8 +- ...tingWithClassReferredByExtendsClause.types | 8 +- ...lauseThatHasItsContainerNameConflict.types | 2 +- .../declarationEmit_nameConflicts3.types | 2 +- .../declarationEmit_protectedMembers.types | 4 +- .../reference/declareDottedExtend.types | 8 +- ...sIndexersWithAssignmentCompatibility.types | 4 +- ...erivedClassOverridesProtectedMembers.types | 2 +- ...rivedClassOverridesProtectedMembers2.types | 4 +- .../derivedClassOverridesWithoutSubtype.types | 4 +- .../baselines/reference/derivedClasses.types | 4 +- ...HiddenBaseCallViaSuperPropertyAccess.types | 2 +- ...rivedTypeDoesNotRequireExtendsClause.types | 2 +- ...ionWithExtensionAndTypeArgumentInES6.types | 4 +- ...itClassDeclarationWithExtensionInES6.types | 4 +- ...clarationWithPropertyAssignmentInES6.types | 4 +- ...lassDeclarationWithSuperMethodCall01.types | 2 +- .../reference/es6ClassSuperCodegenBug.types | 2 +- tests/baselines/reference/es6ClassTest7.types | 4 +- .../exportAssignmentOfGenericType1.types | 2 +- tests/baselines/reference/extBaseClass1.types | 8 +- .../extendAndImplementTheSameBaseType.types | 2 +- .../extendBaseClassBeforeItsDeclared.types | 2 +- .../reference/extendNonClassSymbol1.symbols | 12 ++ .../reference/extendNonClassSymbol1.types | 13 ++ ...ndingClassFromAliasAndUsageInIndexer.types | 8 +- .../reference/functionImplementations.types | 4 +- .../functionSubtypingOfVarArgs.types | 2 +- .../functionSubtypingOfVarArgs2.types | 2 +- .../reference/generatedContextualTyping.types | 4 +- .../reference/generatorTypeCheck17.types | 2 +- .../reference/generatorTypeCheck19.types | 2 +- .../genericBaseClassLiteralProperty.types | 2 +- .../genericBaseClassLiteralProperty2.types | 2 +- ...WithConstraintsTypeArgumentInference.types | 4 +- .../genericCallWithObjectTypeArgs2.types | 4 +- ...allWithObjectTypeArgsAndConstraints2.types | 2 +- .../genericCallbacksAndClassHierarchy.types | 2 +- ...heritsConstructorFromNonGenericClass.types | 4 +- ...assPropertyInheritanceSpecialization.types | 4 +- .../reference/genericClassStaticMethod.types | 2 +- .../baselines/reference/genericClasses3.types | 2 +- ...ericConstraintOnExtendedBuiltinTypes.types | 2 +- ...ricConstraintOnExtendedBuiltinTypes2.types | 2 +- .../reference/genericPrototypeProperty2.types | 4 +- .../reference/genericPrototypeProperty3.types | 4 +- ...cRecursiveImplicitConstructorErrors2.types | 2 +- ...nericWithIndexerOfTypeParameterType2.types | 4 +- .../heterogeneousArrayLiterals.types | 4 +- .../reference/ifDoWhileStatements.types | 2 +- .../reference/importShadowsGlobalName.types | 2 +- .../reference/importUsedInExtendsList1.types | 4 +- ...finitelyExpandingTypesNonGenericBase.types | 2 +- ...eNamePrivatePropertiesFromSameOrigin.types | 4 +- ...nheritanceMemberFuncOverridingMethod.types | 2 +- ...anceMemberPropertyOverridingProperty.types | 2 +- ...heritanceOfGenericConstructorMethod1.types | 2 +- ...heritanceOfGenericConstructorMethod2.types | 8 +- ...nheritanceStaticFuncOverridingMethod.types | 2 +- ...aticFuncOverridingPropertyOfFuncType.types | 2 +- ...icFunctionOverridingInstanceProperty.types | 2 +- .../inheritanceStaticMembersCompatible.types | 2 +- ...anceStaticPropertyOverridingProperty.types | 2 +- ...instantiatedReturnTypeContravariance.types | 2 +- .../reference/interfaceExtendsClass1.types | 6 +- .../reference/iterableArrayPattern11.types | 2 +- .../reference/iterableArrayPattern12.types | 2 +- .../reference/iterableArrayPattern13.types | 2 +- .../reference/iterableArrayPattern3.types | 2 +- .../reference/iterableArrayPattern4.types | 2 +- .../reference/iterableArrayPattern9.types | 2 +- tests/baselines/reference/localTypes1.types | 4 +- tests/baselines/reference/m7Bugs.types | 2 +- ...oduleImportedForTypeArgumentPosition.types | 2 +- .../moduleWithStatementsOfEveryKind.types | 8 +- .../mutuallyRecursiveGenericBaseTypes2.types | 2 +- tests/baselines/reference/noEmitHelpers.types | 2 +- ...ricClassExtendingGenericClassWithAny.types | 2 +- .../reference/numericIndexerConstraint3.types | 2 +- .../reference/numericIndexerConstraint4.types | 2 +- ...ectTypesIdentityWithNumericIndexers1.types | 4 +- ...ectTypesIdentityWithNumericIndexers2.types | 6 +- ...ectTypesIdentityWithNumericIndexers3.types | 4 +- .../objectTypesIdentityWithPrivates.types | 4 +- .../objectTypesIdentityWithPrivates2.types | 2 +- ...bjectTypesIdentityWithStringIndexers.types | 4 +- ...jectTypesIdentityWithStringIndexers2.types | 6 +- .../optionalConstructorArgInSuper.types | 2 +- .../reference/optionalParamInOverride.types | 2 +- .../overloadOnConstConstraintChecks1.types | 6 +- .../overloadOnConstConstraintChecks2.types | 4 +- .../overloadOnConstConstraintChecks3.types | 4 +- tests/baselines/reference/privacyClass.types | 48 ++--- .../baselines/reference/privacyGloClass.types | 20 +- ...ccessOnTypeParameterWithConstraints2.types | 2 +- ...lassPropertyAccessibleWithinSubclass.types | 2 +- .../recursiveBaseConstructorCreation1.types | 2 +- .../recursiveBaseConstructorCreation2.types | 4 +- ...nstantiationsWithDefaultConstructors.types | 2 +- .../recursiveComplicatedClasses.types | 6 +- ...elySpecializedConstructorDeclaration.types | 2 +- ...sDeclarationWhenInBaseTypeResolution.types | 188 +++++++++--------- .../reference/returnStatements.types | 2 +- ...thDefaultConstructorAndExtendsClause.types | 2 +- .../specializedInheritedConstructors1.types | 2 +- .../baselines/reference/staticFactory1.types | 2 +- .../reference/staticInheritance.types | 2 +- .../staticMemberAccessOffDerivedType1.types | 2 +- .../reference/subtypingTransitivity.types | 4 +- .../subtypingWithCallSignatures2.types | 6 +- .../subtypingWithCallSignatures3.types | 6 +- .../subtypingWithCallSignatures4.types | 6 +- .../subtypingWithConstructSignatures2.types | 6 +- .../subtypingWithConstructSignatures3.types | 6 +- .../subtypingWithConstructSignatures4.types | 6 +- .../subtypingWithConstructSignatures5.types | 6 +- .../subtypingWithConstructSignatures6.types | 6 +- .../subtypingWithObjectMembers4.types | 8 +- tests/baselines/reference/super2.types | 8 +- .../reference/superAccessInFatArrow1.types | 2 +- ...FromClassThatDerivesFromGenericType1.types | 2 +- ...FromClassThatDerivesFromGenericType2.types | 2 +- .../superCallParameterContextualTyping1.types | 2 +- .../superCallParameterContextualTyping3.types | 2 +- tests/baselines/reference/superCalls.types | 4 +- .../reference/superInCatchBlock1.types | 2 +- .../superWithGenericSpecialization.types | 2 +- .../reference/superWithGenerics.types | 2 +- .../reference/switchStatements.types | 2 +- .../reference/symbolProperty26.types | 2 +- .../reference/symbolProperty27.types | 2 +- .../reference/symbolProperty28.types | 2 +- .../reference/typeGuardFunction.types | 2 +- .../reference/typeGuardFunctionGenerics.types | 2 +- .../reference/typeGuardOfFormInstanceOf.types | 2 +- .../reference/typeGuardOfFormIsType.types | 2 +- .../baselines/reference/typeOfSuperCall.types | 2 +- .../typeParameterExtendingUnion1.types | 4 +- .../typeParameterExtendingUnion2.types | 4 +- tests/baselines/reference/typeofClass2.types | 2 +- .../typesWithSpecializedCallSignatures.types | 4 +- ...esWithSpecializedConstructSignatures.types | 4 +- .../undefinedIsSubtypeOfEverything.types | 44 ++-- .../reference/underscoreMapFirst.types | 2 +- .../reference/unionTypeFromArrayLiteral.types | 4 +- .../reference/validUseOfThisInSuper.types | 2 +- .../reference/varArgsOnConstructorTypes.types | 2 +- 231 files changed, 553 insertions(+), 528 deletions(-) create mode 100644 tests/baselines/reference/extendNonClassSymbol1.symbols create mode 100644 tests/baselines/reference/extendNonClassSymbol1.types diff --git a/tests/baselines/reference/ExportClassWithAccessibleTypesInTypeParameterConstraintsClassHeritageListMemberTypeAnnotations.types b/tests/baselines/reference/ExportClassWithAccessibleTypesInTypeParameterConstraintsClassHeritageListMemberTypeAnnotations.types index a5cefcc521e..91c1ea573ec 100644 --- a/tests/baselines/reference/ExportClassWithAccessibleTypesInTypeParameterConstraintsClassHeritageListMemberTypeAnnotations.types +++ b/tests/baselines/reference/ExportClassWithAccessibleTypesInTypeParameterConstraintsClassHeritageListMemberTypeAnnotations.types @@ -23,7 +23,7 @@ module A { export class Point3d extends Point { >Point3d : Point3d ->Point : Point +>Point : typeof Point z: number; >z : number diff --git a/tests/baselines/reference/ExportClassWithInaccessibleTypeInTypeParameterConstraint.types b/tests/baselines/reference/ExportClassWithInaccessibleTypeInTypeParameterConstraint.types index ba174d9bbba..e1764ef1c20 100644 --- a/tests/baselines/reference/ExportClassWithInaccessibleTypeInTypeParameterConstraint.types +++ b/tests/baselines/reference/ExportClassWithInaccessibleTypeInTypeParameterConstraint.types @@ -23,7 +23,7 @@ module A { export class Point3d extends Point { >Point3d : Point3d ->Point : Point +>Point : typeof Point z: number; >z : number diff --git a/tests/baselines/reference/accessOverriddenBaseClassMember1.types b/tests/baselines/reference/accessOverriddenBaseClassMember1.types index 2aeb541d723..91b84981fc1 100644 --- a/tests/baselines/reference/accessOverriddenBaseClassMember1.types +++ b/tests/baselines/reference/accessOverriddenBaseClassMember1.types @@ -25,7 +25,7 @@ class Point { } class ColoredPoint extends Point { >ColoredPoint : ColoredPoint ->Point : Point +>Point : typeof Point constructor(x: number, y: number, public color: string) { >x : number diff --git a/tests/baselines/reference/aliasUsageInAccessorsOfClass.types b/tests/baselines/reference/aliasUsageInAccessorsOfClass.types index eccdbc8528c..df91e254c65 100644 --- a/tests/baselines/reference/aliasUsageInAccessorsOfClass.types +++ b/tests/baselines/reference/aliasUsageInAccessorsOfClass.types @@ -53,9 +53,9 @@ import Backbone = require("aliasUsage1_backbone"); export class VisualizationModel extends Backbone.Model { >VisualizationModel : VisualizationModel ->Backbone.Model : any +>Backbone.Model : typeof Backbone.Model >Backbone : typeof Backbone ->Model : Backbone.Model +>Model : typeof Backbone.Model // interesting stuff here } diff --git a/tests/baselines/reference/aliasUsageInArray.types b/tests/baselines/reference/aliasUsageInArray.types index ee54300e7d9..9410d4362bb 100644 --- a/tests/baselines/reference/aliasUsageInArray.types +++ b/tests/baselines/reference/aliasUsageInArray.types @@ -41,9 +41,9 @@ import Backbone = require("aliasUsageInArray_backbone"); export class VisualizationModel extends Backbone.Model { >VisualizationModel : VisualizationModel ->Backbone.Model : any +>Backbone.Model : typeof Backbone.Model >Backbone : typeof Backbone ->Model : Backbone.Model +>Model : typeof Backbone.Model // interesting stuff here } diff --git a/tests/baselines/reference/aliasUsageInFunctionExpression.types b/tests/baselines/reference/aliasUsageInFunctionExpression.types index 17994dcab52..9b2244f9ff8 100644 --- a/tests/baselines/reference/aliasUsageInFunctionExpression.types +++ b/tests/baselines/reference/aliasUsageInFunctionExpression.types @@ -42,9 +42,9 @@ import Backbone = require("aliasUsageInFunctionExpression_backbone"); export class VisualizationModel extends Backbone.Model { >VisualizationModel : VisualizationModel ->Backbone.Model : any +>Backbone.Model : typeof Backbone.Model >Backbone : typeof Backbone ->Model : Backbone.Model +>Model : typeof Backbone.Model // interesting stuff here } diff --git a/tests/baselines/reference/aliasUsageInGenericFunction.types b/tests/baselines/reference/aliasUsageInGenericFunction.types index 0821732f5fc..8fdc39d3c6a 100644 --- a/tests/baselines/reference/aliasUsageInGenericFunction.types +++ b/tests/baselines/reference/aliasUsageInGenericFunction.types @@ -57,9 +57,9 @@ import Backbone = require("aliasUsageInGenericFunction_backbone"); export class VisualizationModel extends Backbone.Model { >VisualizationModel : VisualizationModel ->Backbone.Model : any +>Backbone.Model : typeof Backbone.Model >Backbone : typeof Backbone ->Model : Backbone.Model +>Model : typeof Backbone.Model // interesting stuff here } diff --git a/tests/baselines/reference/aliasUsageInIndexerOfClass.types b/tests/baselines/reference/aliasUsageInIndexerOfClass.types index fe67655d4f5..ce9c598df4d 100644 --- a/tests/baselines/reference/aliasUsageInIndexerOfClass.types +++ b/tests/baselines/reference/aliasUsageInIndexerOfClass.types @@ -50,9 +50,9 @@ import Backbone = require("aliasUsageInIndexerOfClass_backbone"); export class VisualizationModel extends Backbone.Model { >VisualizationModel : VisualizationModel ->Backbone.Model : any +>Backbone.Model : typeof Backbone.Model >Backbone : typeof Backbone ->Model : Backbone.Model +>Model : typeof Backbone.Model // interesting stuff here } diff --git a/tests/baselines/reference/aliasUsageInObjectLiteral.types b/tests/baselines/reference/aliasUsageInObjectLiteral.types index 32a78d555b1..58db02d1bf0 100644 --- a/tests/baselines/reference/aliasUsageInObjectLiteral.types +++ b/tests/baselines/reference/aliasUsageInObjectLiteral.types @@ -55,9 +55,9 @@ import Backbone = require("aliasUsageInObjectLiteral_backbone"); export class VisualizationModel extends Backbone.Model { >VisualizationModel : VisualizationModel ->Backbone.Model : any +>Backbone.Model : typeof Backbone.Model >Backbone : typeof Backbone ->Model : Backbone.Model +>Model : typeof Backbone.Model // interesting stuff here } diff --git a/tests/baselines/reference/aliasUsageInOrExpression.types b/tests/baselines/reference/aliasUsageInOrExpression.types index 8d3163d481b..2c86e51841f 100644 --- a/tests/baselines/reference/aliasUsageInOrExpression.types +++ b/tests/baselines/reference/aliasUsageInOrExpression.types @@ -79,9 +79,9 @@ import Backbone = require("aliasUsageInOrExpression_backbone"); export class VisualizationModel extends Backbone.Model { >VisualizationModel : VisualizationModel ->Backbone.Model : any +>Backbone.Model : typeof Backbone.Model >Backbone : typeof Backbone ->Model : Backbone.Model +>Model : typeof Backbone.Model // interesting stuff here } diff --git a/tests/baselines/reference/aliasUsageInTypeArgumentOfExtendsClause.types b/tests/baselines/reference/aliasUsageInTypeArgumentOfExtendsClause.types index 460b422a2a4..58fac086fd3 100644 --- a/tests/baselines/reference/aliasUsageInTypeArgumentOfExtendsClause.types +++ b/tests/baselines/reference/aliasUsageInTypeArgumentOfExtendsClause.types @@ -25,7 +25,7 @@ class C { } class D extends C { >D : D ->C : C +>C : typeof C >IHasVisualizationModel : IHasVisualizationModel x = moduleA; @@ -46,9 +46,9 @@ import Backbone = require("aliasUsageInTypeArgumentOfExtendsClause_backbone"); export class VisualizationModel extends Backbone.Model { >VisualizationModel : VisualizationModel ->Backbone.Model : any +>Backbone.Model : typeof Backbone.Model >Backbone : typeof Backbone ->Model : Backbone.Model +>Model : typeof Backbone.Model // interesting stuff here } diff --git a/tests/baselines/reference/aliasUsageInVarAssignment.types b/tests/baselines/reference/aliasUsageInVarAssignment.types index b5d20a1b372..945fd16899f 100644 --- a/tests/baselines/reference/aliasUsageInVarAssignment.types +++ b/tests/baselines/reference/aliasUsageInVarAssignment.types @@ -37,9 +37,9 @@ import Backbone = require("aliasUsageInVarAssignment_backbone"); export class VisualizationModel extends Backbone.Model { >VisualizationModel : VisualizationModel ->Backbone.Model : any +>Backbone.Model : typeof Backbone.Model >Backbone : typeof Backbone ->Model : Backbone.Model +>Model : typeof Backbone.Model // interesting stuff here } diff --git a/tests/baselines/reference/ambientClassDeclarationWithExtends.types b/tests/baselines/reference/ambientClassDeclarationWithExtends.types index 7609856882b..fc60ddcea86 100644 --- a/tests/baselines/reference/ambientClassDeclarationWithExtends.types +++ b/tests/baselines/reference/ambientClassDeclarationWithExtends.types @@ -4,5 +4,5 @@ declare class A { } declare class B extends A { } >B : B ->A : A +>A : typeof A diff --git a/tests/baselines/reference/ambientModuleWithClassDeclarationWithExtends.types b/tests/baselines/reference/ambientModuleWithClassDeclarationWithExtends.types index 2708946518f..875fd034e03 100644 --- a/tests/baselines/reference/ambientModuleWithClassDeclarationWithExtends.types +++ b/tests/baselines/reference/ambientModuleWithClassDeclarationWithExtends.types @@ -7,5 +7,5 @@ declare module foo { class B extends A { } >B : B ->A : A +>A : typeof A } diff --git a/tests/baselines/reference/ambiguousOverloadResolution.types b/tests/baselines/reference/ambiguousOverloadResolution.types index dd42b44d7c3..f01c53c2941 100644 --- a/tests/baselines/reference/ambiguousOverloadResolution.types +++ b/tests/baselines/reference/ambiguousOverloadResolution.types @@ -4,7 +4,7 @@ class A { } class B extends A { x: number; } >B : B ->A : A +>A : typeof A >x : number declare function f(p: A, q: B): number; diff --git a/tests/baselines/reference/arrayBestCommonTypes.types b/tests/baselines/reference/arrayBestCommonTypes.types index 5650efc9ae7..b240eebd798 100644 --- a/tests/baselines/reference/arrayBestCommonTypes.types +++ b/tests/baselines/reference/arrayBestCommonTypes.types @@ -15,7 +15,7 @@ module EmptyTypes { class derived extends base { } >derived : derived ->base : base +>base : typeof base class f { @@ -417,7 +417,7 @@ module NonEmptyTypes { class derived extends base { a: string; } >derived : derived ->base : base +>base : typeof base >a : string diff --git a/tests/baselines/reference/arrayLiteralTypeInference.types b/tests/baselines/reference/arrayLiteralTypeInference.types index 660592fceb8..853db63b538 100644 --- a/tests/baselines/reference/arrayLiteralTypeInference.types +++ b/tests/baselines/reference/arrayLiteralTypeInference.types @@ -8,7 +8,7 @@ class Action { class ActionA extends Action { >ActionA : ActionA ->Action : Action +>Action : typeof Action value: string; >value : string @@ -16,7 +16,7 @@ class ActionA extends Action { class ActionB extends Action { >ActionB : ActionB ->Action : Action +>Action : typeof Action trueNess: boolean; >trueNess : boolean diff --git a/tests/baselines/reference/arrayLiterals.types b/tests/baselines/reference/arrayLiterals.types index e103241dd0b..756ed7145e3 100644 --- a/tests/baselines/reference/arrayLiterals.types +++ b/tests/baselines/reference/arrayLiterals.types @@ -123,12 +123,12 @@ class Base { private p; } class Derived1 extends Base { private m }; >Derived1 : Derived1 ->Base : Base +>Base : typeof Base >m : any class Derived2 extends Base { private n }; >Derived2 : Derived2 ->Base : Base +>Base : typeof Base >n : any var context3: Base[] = [new Derived1(), new Derived2()]; diff --git a/tests/baselines/reference/arrayLiteralsWithRecursiveGenerics.types b/tests/baselines/reference/arrayLiteralsWithRecursiveGenerics.types index 9b2abf25c2d..598ccfe9ca5 100644 --- a/tests/baselines/reference/arrayLiteralsWithRecursiveGenerics.types +++ b/tests/baselines/reference/arrayLiteralsWithRecursiveGenerics.types @@ -17,7 +17,7 @@ class List { class DerivedList extends List { >DerivedList : DerivedList >U : U ->List : List +>List : typeof List >U : U foo: U; diff --git a/tests/baselines/reference/assignmentCompatWithCallSignatures3.types b/tests/baselines/reference/assignmentCompatWithCallSignatures3.types index 72cceae84ff..9fa591812ee 100644 --- a/tests/baselines/reference/assignmentCompatWithCallSignatures3.types +++ b/tests/baselines/reference/assignmentCompatWithCallSignatures3.types @@ -7,17 +7,17 @@ class Base { foo: string; } class Derived extends Base { bar: string; } >Derived : Derived ->Base : Base +>Base : typeof Base >bar : string class Derived2 extends Derived { baz: string; } >Derived2 : Derived2 ->Derived : Derived +>Derived : typeof Derived >baz : string class OtherDerived extends Base { bing: string; } >OtherDerived : OtherDerived ->Base : Base +>Base : typeof Base >bing : string var a: (x: number) => number[]; diff --git a/tests/baselines/reference/assignmentCompatWithCallSignatures5.types b/tests/baselines/reference/assignmentCompatWithCallSignatures5.types index 2652a2a4e68..8ed785b0044 100644 --- a/tests/baselines/reference/assignmentCompatWithCallSignatures5.types +++ b/tests/baselines/reference/assignmentCompatWithCallSignatures5.types @@ -7,17 +7,17 @@ class Base { foo: string; } class Derived extends Base { bar: string; } >Derived : Derived ->Base : Base +>Base : typeof Base >bar : string class Derived2 extends Derived { baz: string; } >Derived2 : Derived2 ->Derived : Derived +>Derived : typeof Derived >baz : string class OtherDerived extends Base { bing: string; } >OtherDerived : OtherDerived ->Base : Base +>Base : typeof Base >bing : string var a: (x: T) => T[]; diff --git a/tests/baselines/reference/assignmentCompatWithCallSignatures6.types b/tests/baselines/reference/assignmentCompatWithCallSignatures6.types index b45f3357942..309834e5974 100644 --- a/tests/baselines/reference/assignmentCompatWithCallSignatures6.types +++ b/tests/baselines/reference/assignmentCompatWithCallSignatures6.types @@ -7,17 +7,17 @@ class Base { foo: string; } class Derived extends Base { bar: string; } >Derived : Derived ->Base : Base +>Base : typeof Base >bar : string class Derived2 extends Derived { baz: string; } >Derived2 : Derived2 ->Derived : Derived +>Derived : typeof Derived >baz : string class OtherDerived extends Base { bing: string; } >OtherDerived : OtherDerived ->Base : Base +>Base : typeof Base >bing : string interface A { diff --git a/tests/baselines/reference/assignmentCompatWithConstructSignatures3.types b/tests/baselines/reference/assignmentCompatWithConstructSignatures3.types index 807f31b0e6e..25200f7988f 100644 --- a/tests/baselines/reference/assignmentCompatWithConstructSignatures3.types +++ b/tests/baselines/reference/assignmentCompatWithConstructSignatures3.types @@ -7,17 +7,17 @@ class Base { foo: string; } class Derived extends Base { bar: string; } >Derived : Derived ->Base : Base +>Base : typeof Base >bar : string class Derived2 extends Derived { baz: string; } >Derived2 : Derived2 ->Derived : Derived +>Derived : typeof Derived >baz : string class OtherDerived extends Base { bing: string; } >OtherDerived : OtherDerived ->Base : Base +>Base : typeof Base >bing : string var a: new (x: number) => number[]; diff --git a/tests/baselines/reference/assignmentCompatWithConstructSignatures5.types b/tests/baselines/reference/assignmentCompatWithConstructSignatures5.types index 6e6a1457a76..276ba7f6940 100644 --- a/tests/baselines/reference/assignmentCompatWithConstructSignatures5.types +++ b/tests/baselines/reference/assignmentCompatWithConstructSignatures5.types @@ -7,17 +7,17 @@ class Base { foo: string; } class Derived extends Base { bar: string; } >Derived : Derived ->Base : Base +>Base : typeof Base >bar : string class Derived2 extends Derived { baz: string; } >Derived2 : Derived2 ->Derived : Derived +>Derived : typeof Derived >baz : string class OtherDerived extends Base { bing: string; } >OtherDerived : OtherDerived ->Base : Base +>Base : typeof Base >bing : string var a: new (x: T) => T[]; diff --git a/tests/baselines/reference/assignmentCompatWithConstructSignatures6.types b/tests/baselines/reference/assignmentCompatWithConstructSignatures6.types index 74a20b9b21e..49b26118fa3 100644 --- a/tests/baselines/reference/assignmentCompatWithConstructSignatures6.types +++ b/tests/baselines/reference/assignmentCompatWithConstructSignatures6.types @@ -7,17 +7,17 @@ class Base { foo: string; } class Derived extends Base { bar: string; } >Derived : Derived ->Base : Base +>Base : typeof Base >bar : string class Derived2 extends Derived { baz: string; } >Derived2 : Derived2 ->Derived : Derived +>Derived : typeof Derived >baz : string class OtherDerived extends Base { bing: string; } >OtherDerived : OtherDerived ->Base : Base +>Base : typeof Base >bing : string interface A { diff --git a/tests/baselines/reference/baseIndexSignatureResolution.types b/tests/baselines/reference/baseIndexSignatureResolution.types index 90d143155fb..6a57d4b9805 100644 --- a/tests/baselines/reference/baseIndexSignatureResolution.types +++ b/tests/baselines/reference/baseIndexSignatureResolution.types @@ -5,7 +5,7 @@ class Base { private a: string; } class Derived extends Base { private b: string; } >Derived : Derived ->Base : Base +>Base : typeof Base >b : string // Note - commmenting "extends Foo" prevents the error diff --git a/tests/baselines/reference/baseTypeOrderChecking.types b/tests/baselines/reference/baseTypeOrderChecking.types index 4193f255f36..32f3325e85c 100644 --- a/tests/baselines/reference/baseTypeOrderChecking.types +++ b/tests/baselines/reference/baseTypeOrderChecking.types @@ -17,7 +17,7 @@ class Class1 class Class2 extends Class1 >Class2 : Class2 ->Class1 : Class1 +>Class1 : typeof Class1 { @@ -42,7 +42,7 @@ class Class3 class Class4 extends Class3 >Class4 : Class4 >T : T ->Class3 : Class3 +>Class3 : typeof Class3 >T : T { diff --git a/tests/baselines/reference/baseTypeWrappingInstantiationChain.types b/tests/baselines/reference/baseTypeWrappingInstantiationChain.types index 61919bad212..bce18aa359e 100644 --- a/tests/baselines/reference/baseTypeWrappingInstantiationChain.types +++ b/tests/baselines/reference/baseTypeWrappingInstantiationChain.types @@ -2,7 +2,7 @@ class C extends CBase { >C : C >T1 : T1 ->CBase : CBase +>CBase : typeof CBase >T1 : T1 public works() { @@ -35,7 +35,7 @@ class C extends CBase { class CBase extends CBaseBase> { >CBase : CBase >T2 : T2 ->CBaseBase : CBaseBase +>CBaseBase : typeof CBaseBase >Wrapper : Wrapper >T2 : T2 diff --git a/tests/baselines/reference/bestCommonTypeOfConditionalExpressions.types b/tests/baselines/reference/bestCommonTypeOfConditionalExpressions.types index 2a5ee6a2fe2..72510bfc324 100644 --- a/tests/baselines/reference/bestCommonTypeOfConditionalExpressions.types +++ b/tests/baselines/reference/bestCommonTypeOfConditionalExpressions.types @@ -18,12 +18,12 @@ class Base { foo: string; } class Derived extends Base { bar: string; } >Derived : Derived ->Base : Base +>Base : typeof Base >bar : string class Derived2 extends Base { baz: string; } >Derived2 : Derived2 ->Base : Base +>Base : typeof Base >baz : string var base: Base; diff --git a/tests/baselines/reference/bestCommonTypeOfTuple2.types b/tests/baselines/reference/bestCommonTypeOfTuple2.types index 32196fdf668..ceb15c45cba 100644 --- a/tests/baselines/reference/bestCommonTypeOfTuple2.types +++ b/tests/baselines/reference/bestCommonTypeOfTuple2.types @@ -23,7 +23,7 @@ class E implements base { e } class F extends C { f } >F : F ->C : C +>C : typeof C >f : any class C1 implements base1 { i = "foo"; c } @@ -35,7 +35,7 @@ class C1 implements base1 { i = "foo"; c } class D1 extends C1 { i = "bar"; d } >D1 : D1 ->C1 : C1 +>C1 : typeof C1 >i : string >"bar" : string >d : any diff --git a/tests/baselines/reference/callSignatureAssignabilityInInheritance2.types b/tests/baselines/reference/callSignatureAssignabilityInInheritance2.types index 335413cd73e..b98cd8d36c9 100644 --- a/tests/baselines/reference/callSignatureAssignabilityInInheritance2.types +++ b/tests/baselines/reference/callSignatureAssignabilityInInheritance2.types @@ -7,17 +7,17 @@ class Base { foo: string; } class Derived extends Base { bar: string; } >Derived : Derived ->Base : Base +>Base : typeof Base >bar : string class Derived2 extends Derived { baz: string; } >Derived2 : Derived2 ->Derived : Derived +>Derived : typeof Derived >baz : string class OtherDerived extends Base { bing: string; } >OtherDerived : OtherDerived ->Base : Base +>Base : typeof Base >bing : string interface A { // T diff --git a/tests/baselines/reference/callSignatureAssignabilityInInheritance4.types b/tests/baselines/reference/callSignatureAssignabilityInInheritance4.types index 0575d1332ce..c7f573fe9df 100644 --- a/tests/baselines/reference/callSignatureAssignabilityInInheritance4.types +++ b/tests/baselines/reference/callSignatureAssignabilityInInheritance4.types @@ -7,17 +7,17 @@ class Base { foo: string; } class Derived extends Base { bar: string; } >Derived : Derived ->Base : Base +>Base : typeof Base >bar : string class Derived2 extends Derived { baz: string; } >Derived2 : Derived2 ->Derived : Derived +>Derived : typeof Derived >baz : string class OtherDerived extends Base { bing: string; } >OtherDerived : OtherDerived ->Base : Base +>Base : typeof Base >bing : string interface A { // T diff --git a/tests/baselines/reference/callSignatureAssignabilityInInheritance5.types b/tests/baselines/reference/callSignatureAssignabilityInInheritance5.types index 0ffc8257a56..14325053248 100644 --- a/tests/baselines/reference/callSignatureAssignabilityInInheritance5.types +++ b/tests/baselines/reference/callSignatureAssignabilityInInheritance5.types @@ -8,17 +8,17 @@ class Base { foo: string; } class Derived extends Base { bar: string; } >Derived : Derived ->Base : Base +>Base : typeof Base >bar : string class Derived2 extends Derived { baz: string; } >Derived2 : Derived2 ->Derived : Derived +>Derived : typeof Derived >baz : string class OtherDerived extends Base { bing: string; } >OtherDerived : OtherDerived ->Base : Base +>Base : typeof Base >bing : string interface A { // T diff --git a/tests/baselines/reference/callSignatureAssignabilityInInheritance6.types b/tests/baselines/reference/callSignatureAssignabilityInInheritance6.types index 721b691be70..67f43b9990a 100644 --- a/tests/baselines/reference/callSignatureAssignabilityInInheritance6.types +++ b/tests/baselines/reference/callSignatureAssignabilityInInheritance6.types @@ -9,17 +9,17 @@ class Base { foo: string; } class Derived extends Base { bar: string; } >Derived : Derived ->Base : Base +>Base : typeof Base >bar : string class Derived2 extends Derived { baz: string; } >Derived2 : Derived2 ->Derived : Derived +>Derived : typeof Derived >baz : string class OtherDerived extends Base { bing: string; } >OtherDerived : OtherDerived ->Base : Base +>Base : typeof Base >bing : string interface A { // T diff --git a/tests/baselines/reference/callWithSpread.types b/tests/baselines/reference/callWithSpread.types index f7097727204..68c738f1832 100644 --- a/tests/baselines/reference/callWithSpread.types +++ b/tests/baselines/reference/callWithSpread.types @@ -205,7 +205,7 @@ class C { class D extends C { >D : D ->C : C +>C : typeof C constructor() { super(1, 2); diff --git a/tests/baselines/reference/callWithSpreadES6.types b/tests/baselines/reference/callWithSpreadES6.types index ba638207e8a..ecbfba54e9f 100644 --- a/tests/baselines/reference/callWithSpreadES6.types +++ b/tests/baselines/reference/callWithSpreadES6.types @@ -206,7 +206,7 @@ class C { class D extends C { >D : D ->C : C +>C : typeof C constructor() { super(1, 2); diff --git a/tests/baselines/reference/captureThisInSuperCall.types b/tests/baselines/reference/captureThisInSuperCall.types index faa7d2ad97e..b67307e4f83 100644 --- a/tests/baselines/reference/captureThisInSuperCall.types +++ b/tests/baselines/reference/captureThisInSuperCall.types @@ -8,7 +8,7 @@ class A { class B extends A { >B : B ->A : A +>A : typeof A constructor() { super({ test: () => this.someMethod()}); } >super({ test: () => this.someMethod()}) : void diff --git a/tests/baselines/reference/checkForObjectTooStrict.types b/tests/baselines/reference/checkForObjectTooStrict.types index 3dd47c79743..a6cd5194f02 100644 --- a/tests/baselines/reference/checkForObjectTooStrict.types +++ b/tests/baselines/reference/checkForObjectTooStrict.types @@ -13,9 +13,9 @@ module Foo { class Bar extends Foo.Object { // should work >Bar : Bar ->Foo.Object : any +>Foo.Object : typeof Foo.Object >Foo : typeof Foo ->Object : Foo.Object +>Object : typeof Foo.Object constructor () { @@ -30,7 +30,7 @@ class Bar extends Foo.Object { // should work class Baz extends Object { >Baz : Baz ->Object : Object +>Object : ObjectConstructor constructor () { // ERROR, as expected diff --git a/tests/baselines/reference/circularImportAlias.types b/tests/baselines/reference/circularImportAlias.types index 3ab41f6187b..436ad56ddf8 100644 --- a/tests/baselines/reference/circularImportAlias.types +++ b/tests/baselines/reference/circularImportAlias.types @@ -10,9 +10,9 @@ module B { export class D extends a.C { >D : D ->a.C : any +>a.C : typeof a.C >a : typeof a ->C : a.C +>C : typeof a.C id: number; >id : number diff --git a/tests/baselines/reference/classConstructorParametersAccessibility3.types b/tests/baselines/reference/classConstructorParametersAccessibility3.types index 3372044569c..5df83005ad9 100644 --- a/tests/baselines/reference/classConstructorParametersAccessibility3.types +++ b/tests/baselines/reference/classConstructorParametersAccessibility3.types @@ -8,7 +8,7 @@ class Base { class Derived extends Base { >Derived : Derived ->Base : Base +>Base : typeof Base constructor(public p: number) { >p : number diff --git a/tests/baselines/reference/classDeclarationMergedInModuleWithContinuation.types b/tests/baselines/reference/classDeclarationMergedInModuleWithContinuation.types index f1be8e6d268..ddf8b10d1a1 100644 --- a/tests/baselines/reference/classDeclarationMergedInModuleWithContinuation.types +++ b/tests/baselines/reference/classDeclarationMergedInModuleWithContinuation.types @@ -19,8 +19,8 @@ module M { export class O extends M.N { >O : O ->M.N : any +>M.N : typeof N >M : typeof M ->N : N +>N : typeof N } } diff --git a/tests/baselines/reference/classDoesNotDependOnBaseTypes.types b/tests/baselines/reference/classDoesNotDependOnBaseTypes.types index c342f0ea002..5ea05baf35e 100644 --- a/tests/baselines/reference/classDoesNotDependOnBaseTypes.types +++ b/tests/baselines/reference/classDoesNotDependOnBaseTypes.types @@ -39,5 +39,5 @@ class StringTreeCollectionBase { class StringTreeCollection extends StringTreeCollectionBase { } >StringTreeCollection : StringTreeCollection ->StringTreeCollectionBase : StringTreeCollectionBase +>StringTreeCollectionBase : typeof StringTreeCollectionBase diff --git a/tests/baselines/reference/classExtendingClass.types b/tests/baselines/reference/classExtendingClass.types index f91493e97fd..b72463ae2d7 100644 --- a/tests/baselines/reference/classExtendingClass.types +++ b/tests/baselines/reference/classExtendingClass.types @@ -14,7 +14,7 @@ class C { class D extends C { >D : D ->C : C +>C : typeof C bar: string; >bar : string @@ -73,7 +73,7 @@ class C2 { class D2 extends C2 { >D2 : D2 >T : T ->C2 : C2 +>C2 : typeof C2 >T : T bar: string; diff --git a/tests/baselines/reference/classExtendingQualifiedName2.types b/tests/baselines/reference/classExtendingQualifiedName2.types index 9f0c03db17d..35a41203c0d 100644 --- a/tests/baselines/reference/classExtendingQualifiedName2.types +++ b/tests/baselines/reference/classExtendingQualifiedName2.types @@ -8,8 +8,8 @@ module M { class D extends M.C { >D : D ->M.C : any +>M.C : typeof C >M : typeof M ->C : C +>C : typeof C } } diff --git a/tests/baselines/reference/classImplementsClass3.types b/tests/baselines/reference/classImplementsClass3.types index 6f97a96a56e..0d8696721c1 100644 --- a/tests/baselines/reference/classImplementsClass3.types +++ b/tests/baselines/reference/classImplementsClass3.types @@ -18,7 +18,7 @@ class C implements A { class C2 extends A {} >C2 : C2 ->A : A +>A : typeof A // no errors var c: C; diff --git a/tests/baselines/reference/classOrder2.types b/tests/baselines/reference/classOrder2.types index 07bd6ba45a5..82422dda46f 100644 --- a/tests/baselines/reference/classOrder2.types +++ b/tests/baselines/reference/classOrder2.types @@ -2,7 +2,7 @@ class A extends B { >A : A ->B : B +>B : typeof B foo() { this.bar(); } >foo : () => void diff --git a/tests/baselines/reference/classOrderBug.types b/tests/baselines/reference/classOrderBug.types index 979b65b8008..c30836e661f 100644 --- a/tests/baselines/reference/classOrderBug.types +++ b/tests/baselines/reference/classOrderBug.types @@ -25,7 +25,7 @@ class baz {} class foo extends baz {} >foo : foo ->baz : baz +>baz : typeof baz diff --git a/tests/baselines/reference/classSideInheritance2.types b/tests/baselines/reference/classSideInheritance2.types index 9c2d632ebbb..90f3b794814 100644 --- a/tests/baselines/reference/classSideInheritance2.types +++ b/tests/baselines/reference/classSideInheritance2.types @@ -11,7 +11,7 @@ interface TextSpan {} class SubText extends TextBase { >SubText : SubText ->TextBase : TextBase +>TextBase : typeof TextBase constructor(text: IText, span: TextSpan) { >text : IText diff --git a/tests/baselines/reference/classWithProtectedProperty.types b/tests/baselines/reference/classWithProtectedProperty.types index 1f53ea2aad9..b3e3afc2736 100644 --- a/tests/baselines/reference/classWithProtectedProperty.types +++ b/tests/baselines/reference/classWithProtectedProperty.types @@ -39,7 +39,7 @@ class C { class D extends C { >D : D ->C : C +>C : typeof C method() { >method : () => void diff --git a/tests/baselines/reference/commentOnAmbientClass1.types b/tests/baselines/reference/commentOnAmbientClass1.types index 44c0334ef6c..28b0c7e19fe 100644 --- a/tests/baselines/reference/commentOnAmbientClass1.types +++ b/tests/baselines/reference/commentOnAmbientClass1.types @@ -2,7 +2,7 @@ /// declare class E extends C { >E : E ->C : C +>C : typeof C } === tests/cases/compiler/a.ts === /*! Keep this pinned comment */ diff --git a/tests/baselines/reference/commentOnAmbientModule.types b/tests/baselines/reference/commentOnAmbientModule.types index 13d35cddcea..f64845cae5d 100644 --- a/tests/baselines/reference/commentOnAmbientModule.types +++ b/tests/baselines/reference/commentOnAmbientModule.types @@ -5,9 +5,9 @@ declare module E { class foobar extends D.bar { >foobar : foobar ->D.bar : any +>D.bar : typeof D.bar >D : typeof D ->bar : D.bar +>bar : typeof D.bar foo(); >foo : () => any diff --git a/tests/baselines/reference/commentsInheritance.types b/tests/baselines/reference/commentsInheritance.types index 1c25f13937b..b6778ca40fc 100644 --- a/tests/baselines/reference/commentsInheritance.types +++ b/tests/baselines/reference/commentsInheritance.types @@ -177,7 +177,7 @@ class c2 { } class c3 extends c2 { >c3 : c3 ->c2 : c2 +>c2 : typeof c2 constructor() { super(10); @@ -232,7 +232,7 @@ c2_i = c3_i; class c4 extends c2 { >c4 : c4 ->c2 : c2 +>c2 : typeof c2 } var c4_i = new c4(10); >c4_i : c4 diff --git a/tests/baselines/reference/comparisonOperatorWithIdenticalObjects.types b/tests/baselines/reference/comparisonOperatorWithIdenticalObjects.types index 7f202c38d3a..adf4b2a1d13 100644 --- a/tests/baselines/reference/comparisonOperatorWithIdenticalObjects.types +++ b/tests/baselines/reference/comparisonOperatorWithIdenticalObjects.types @@ -70,11 +70,11 @@ class Base { } class A2 extends Base { } >A2 : A2 ->Base : Base +>Base : typeof Base class B2 extends Base { } >B2 : B2 ->Base : Base +>Base : typeof Base interface A3 { f(a: number): string; } >A3 : A3 diff --git a/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnCallSignature.types b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnCallSignature.types index b3a972958b3..b6425439a20 100644 --- a/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnCallSignature.types +++ b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnCallSignature.types @@ -8,7 +8,7 @@ class Base { class Derived extends Base { >Derived : Derived ->Base : Base +>Base : typeof Base public b: string; >b : string diff --git a/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnConstructorSignature.types b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnConstructorSignature.types index 737c13f183c..0afc38dba26 100644 --- a/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnConstructorSignature.types +++ b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnConstructorSignature.types @@ -8,7 +8,7 @@ class Base { class Derived extends Base { >Derived : Derived ->Base : Base +>Base : typeof Base public b: string; >b : string diff --git a/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnIndexSignature.types b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnIndexSignature.types index 657fdccbda0..00bb5611a56 100644 --- a/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnIndexSignature.types +++ b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnIndexSignature.types @@ -8,7 +8,7 @@ class Base { class Derived extends Base { >Derived : Derived ->Base : Base +>Base : typeof Base public b: string; >b : string diff --git a/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnInstantiatedCallSignature.types b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnInstantiatedCallSignature.types index c3f0d96e839..7d612407d51 100644 --- a/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnInstantiatedCallSignature.types +++ b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnInstantiatedCallSignature.types @@ -8,7 +8,7 @@ class Base { class Derived extends Base { >Derived : Derived ->Base : Base +>Base : typeof Base public b: string; >b : string diff --git a/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnInstantiatedConstructorSignature.types b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnInstantiatedConstructorSignature.types index 29d92c25726..0c6ea7c0d9f 100644 --- a/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnInstantiatedConstructorSignature.types +++ b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnInstantiatedConstructorSignature.types @@ -8,7 +8,7 @@ class Base { class Derived extends Base { >Derived : Derived ->Base : Base +>Base : typeof Base public b: string; >b : string diff --git a/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnProperty.types b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnProperty.types index d604115e161..efcf6a3ff5d 100644 --- a/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnProperty.types +++ b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnProperty.types @@ -8,7 +8,7 @@ class Base { class Derived extends Base { >Derived : Derived ->Base : Base +>Base : typeof Base public b: string; >b : string @@ -47,7 +47,7 @@ class A2 { class B2 extends A2 { >B2 : B2 ->A2 : A2 +>A2 : typeof A2 private b; >b : any diff --git a/tests/baselines/reference/complexClassRelationships.types b/tests/baselines/reference/complexClassRelationships.types index 43d0232e30a..5c86d8eba2b 100644 --- a/tests/baselines/reference/complexClassRelationships.types +++ b/tests/baselines/reference/complexClassRelationships.types @@ -2,7 +2,7 @@ // There should be no errors in this file class Derived extends Base { >Derived : Derived ->Base : Base +>Base : typeof Base public static createEmpty(): Derived { >createEmpty : () => Derived diff --git a/tests/baselines/reference/computedPropertyNames25_ES5.types b/tests/baselines/reference/computedPropertyNames25_ES5.types index 6ca67cce410..f1f4239085c 100644 --- a/tests/baselines/reference/computedPropertyNames25_ES5.types +++ b/tests/baselines/reference/computedPropertyNames25_ES5.types @@ -11,7 +11,7 @@ class Base { } class C extends Base { >C : C ->Base : Base +>Base : typeof Base foo() { >foo : () => number diff --git a/tests/baselines/reference/computedPropertyNames25_ES6.types b/tests/baselines/reference/computedPropertyNames25_ES6.types index 1c093ebc59f..50a1a299381 100644 --- a/tests/baselines/reference/computedPropertyNames25_ES6.types +++ b/tests/baselines/reference/computedPropertyNames25_ES6.types @@ -11,7 +11,7 @@ class Base { } class C extends Base { >C : C ->Base : Base +>Base : typeof Base foo() { >foo : () => number diff --git a/tests/baselines/reference/computedPropertyNames28_ES5.types b/tests/baselines/reference/computedPropertyNames28_ES5.types index 273dcd426d8..1457903edf7 100644 --- a/tests/baselines/reference/computedPropertyNames28_ES5.types +++ b/tests/baselines/reference/computedPropertyNames28_ES5.types @@ -4,7 +4,7 @@ class Base { } class C extends Base { >C : C ->Base : Base +>Base : typeof Base constructor() { super(); diff --git a/tests/baselines/reference/computedPropertyNames28_ES6.types b/tests/baselines/reference/computedPropertyNames28_ES6.types index a34fb33f6c7..dd1840fe5ef 100644 --- a/tests/baselines/reference/computedPropertyNames28_ES6.types +++ b/tests/baselines/reference/computedPropertyNames28_ES6.types @@ -4,7 +4,7 @@ class Base { } class C extends Base { >C : C ->Base : Base +>Base : typeof Base constructor() { super(); diff --git a/tests/baselines/reference/computedPropertyNames31_ES5.types b/tests/baselines/reference/computedPropertyNames31_ES5.types index 6c0f2572a06..063b98141ba 100644 --- a/tests/baselines/reference/computedPropertyNames31_ES5.types +++ b/tests/baselines/reference/computedPropertyNames31_ES5.types @@ -11,7 +11,7 @@ class Base { } class C extends Base { >C : C ->Base : Base +>Base : typeof Base foo() { >foo : () => number diff --git a/tests/baselines/reference/computedPropertyNames31_ES6.types b/tests/baselines/reference/computedPropertyNames31_ES6.types index eaddc036812..b99d364bb3d 100644 --- a/tests/baselines/reference/computedPropertyNames31_ES6.types +++ b/tests/baselines/reference/computedPropertyNames31_ES6.types @@ -11,7 +11,7 @@ class Base { } class C extends Base { >C : C ->Base : Base +>Base : typeof Base foo() { >foo : () => number diff --git a/tests/baselines/reference/conditionalOperatorWithIdenticalBCT.types b/tests/baselines/reference/conditionalOperatorWithIdenticalBCT.types index 722ec13c684..68745ed7874 100644 --- a/tests/baselines/reference/conditionalOperatorWithIdenticalBCT.types +++ b/tests/baselines/reference/conditionalOperatorWithIdenticalBCT.types @@ -8,12 +8,12 @@ class X { propertyX: any; propertyX1: number; propertyX2: string }; class A extends X { propertyA: number }; >A : A ->X : X +>X : typeof X >propertyA : number class B extends X { propertyB: string }; >B : B ->X : X +>X : typeof X >propertyB : string var x: X; diff --git a/tests/baselines/reference/constantOverloadFunction.types b/tests/baselines/reference/constantOverloadFunction.types index d643d3a726d..18de11823db 100644 --- a/tests/baselines/reference/constantOverloadFunction.types +++ b/tests/baselines/reference/constantOverloadFunction.types @@ -5,17 +5,17 @@ class Base { foo() { } } class Derived1 extends Base { bar() { } } >Derived1 : Derived1 ->Base : Base +>Base : typeof Base >bar : () => void class Derived2 extends Base { baz() { } } >Derived2 : Derived2 ->Base : Base +>Base : typeof Base >baz : () => void class Derived3 extends Base { biz() { } } >Derived3 : Derived3 ->Base : Base +>Base : typeof Base >biz : () => void function foo(tagName: 'canvas'): Derived1; diff --git a/tests/baselines/reference/constraintCheckInGenericBaseTypeReference.types b/tests/baselines/reference/constraintCheckInGenericBaseTypeReference.types index 1d94a5e464c..602ad444a5c 100644 --- a/tests/baselines/reference/constraintCheckInGenericBaseTypeReference.types +++ b/tests/baselines/reference/constraintCheckInGenericBaseTypeReference.types @@ -16,7 +16,7 @@ class GenericBase { } class Derived extends GenericBase { >Derived : Derived ->GenericBase : GenericBase +>GenericBase : typeof GenericBase >TypeArg : TypeArg } diff --git a/tests/baselines/reference/constructSignatureAssignabilityInInheritance2.types b/tests/baselines/reference/constructSignatureAssignabilityInInheritance2.types index 7ab221024ca..7b24ecdab19 100644 --- a/tests/baselines/reference/constructSignatureAssignabilityInInheritance2.types +++ b/tests/baselines/reference/constructSignatureAssignabilityInInheritance2.types @@ -7,17 +7,17 @@ class Base { foo: string; } class Derived extends Base { bar: string; } >Derived : Derived ->Base : Base +>Base : typeof Base >bar : string class Derived2 extends Derived { baz: string; } >Derived2 : Derived2 ->Derived : Derived +>Derived : typeof Derived >baz : string class OtherDerived extends Base { bing: string; } >OtherDerived : OtherDerived ->Base : Base +>Base : typeof Base >bing : string interface A { // T diff --git a/tests/baselines/reference/constructSignatureAssignabilityInInheritance4.types b/tests/baselines/reference/constructSignatureAssignabilityInInheritance4.types index 7782389d69a..d0f28468df4 100644 --- a/tests/baselines/reference/constructSignatureAssignabilityInInheritance4.types +++ b/tests/baselines/reference/constructSignatureAssignabilityInInheritance4.types @@ -7,17 +7,17 @@ class Base { foo: string; } class Derived extends Base { bar: string; } >Derived : Derived ->Base : Base +>Base : typeof Base >bar : string class Derived2 extends Derived { baz: string; } >Derived2 : Derived2 ->Derived : Derived +>Derived : typeof Derived >baz : string class OtherDerived extends Base { bing: string; } >OtherDerived : OtherDerived ->Base : Base +>Base : typeof Base >bing : string interface A { // T diff --git a/tests/baselines/reference/constructSignatureAssignabilityInInheritance5.types b/tests/baselines/reference/constructSignatureAssignabilityInInheritance5.types index dea9478b372..417ad4bba09 100644 --- a/tests/baselines/reference/constructSignatureAssignabilityInInheritance5.types +++ b/tests/baselines/reference/constructSignatureAssignabilityInInheritance5.types @@ -8,17 +8,17 @@ class Base { foo: string; } class Derived extends Base { bar: string; } >Derived : Derived ->Base : Base +>Base : typeof Base >bar : string class Derived2 extends Derived { baz: string; } >Derived2 : Derived2 ->Derived : Derived +>Derived : typeof Derived >baz : string class OtherDerived extends Base { bing: string; } >OtherDerived : OtherDerived ->Base : Base +>Base : typeof Base >bing : string interface A { // T diff --git a/tests/baselines/reference/constructSignatureAssignabilityInInheritance6.types b/tests/baselines/reference/constructSignatureAssignabilityInInheritance6.types index 193a19a5f2c..9fa64f6baad 100644 --- a/tests/baselines/reference/constructSignatureAssignabilityInInheritance6.types +++ b/tests/baselines/reference/constructSignatureAssignabilityInInheritance6.types @@ -9,17 +9,17 @@ class Base { foo: string; } class Derived extends Base { bar: string; } >Derived : Derived ->Base : Base +>Base : typeof Base >bar : string class Derived2 extends Derived { baz: string; } >Derived2 : Derived2 ->Derived : Derived +>Derived : typeof Derived >baz : string class OtherDerived extends Base { bing: string; } >OtherDerived : OtherDerived ->Base : Base +>Base : typeof Base >bing : string interface A { // T diff --git a/tests/baselines/reference/constructorArgs.types b/tests/baselines/reference/constructorArgs.types index ccd23c22f5d..5c0b3e78d7b 100644 --- a/tests/baselines/reference/constructorArgs.types +++ b/tests/baselines/reference/constructorArgs.types @@ -16,7 +16,7 @@ class Super { class Sub extends Super { >Sub : Sub ->Super : Super +>Super : typeof Super constructor(public options:Options) { >options : Options diff --git a/tests/baselines/reference/constructorFunctionTypeIsAssignableToBaseType.types b/tests/baselines/reference/constructorFunctionTypeIsAssignableToBaseType.types index 3702be4f2dc..89f1662a9df 100644 --- a/tests/baselines/reference/constructorFunctionTypeIsAssignableToBaseType.types +++ b/tests/baselines/reference/constructorFunctionTypeIsAssignableToBaseType.types @@ -13,7 +13,7 @@ class Base { class Derived extends Base { >Derived : Derived ->Base : Base +>Base : typeof Base // ok static foo: { @@ -26,7 +26,7 @@ class Derived extends Base { class Derived2 extends Base { >Derived2 : Derived2 ->Base : Base +>Base : typeof Base // ok, use assignability here static foo: { diff --git a/tests/baselines/reference/constructorFunctionTypeIsAssignableToBaseType2.types b/tests/baselines/reference/constructorFunctionTypeIsAssignableToBaseType2.types index e0e86df4a26..39dac2804e0 100644 --- a/tests/baselines/reference/constructorFunctionTypeIsAssignableToBaseType2.types +++ b/tests/baselines/reference/constructorFunctionTypeIsAssignableToBaseType2.types @@ -19,7 +19,7 @@ class Base { class Derived extends Base { >Derived : Derived ->Base : Base +>Base : typeof Base // ok static foo: { @@ -41,7 +41,7 @@ class Derived extends Base { class Derived2 extends Base { >Derived2 : Derived2 ->Base : Base +>Base : typeof Base static foo: { >foo : { bar: number; } diff --git a/tests/baselines/reference/constructorHasPrototypeProperty.types b/tests/baselines/reference/constructorHasPrototypeProperty.types index 24dedb254eb..b8d1265f504 100644 --- a/tests/baselines/reference/constructorHasPrototypeProperty.types +++ b/tests/baselines/reference/constructorHasPrototypeProperty.types @@ -11,7 +11,7 @@ module NonGeneric { class D extends C { >D : D ->C : C +>C : typeof C bar: string; >bar : string @@ -61,7 +61,7 @@ module Generic { >D : D >T : T >U : U ->C : C +>C : typeof C >T : T >U : U diff --git a/tests/baselines/reference/constructorOverloads2.types b/tests/baselines/reference/constructorOverloads2.types index dde032c0fd2..27e16d1fd46 100644 --- a/tests/baselines/reference/constructorOverloads2.types +++ b/tests/baselines/reference/constructorOverloads2.types @@ -17,7 +17,7 @@ class FooBase { class Foo extends FooBase { >Foo : Foo ->FooBase : FooBase +>FooBase : typeof FooBase constructor(s: string); >s : string diff --git a/tests/baselines/reference/contextualTypingArrayOfLambdas.types b/tests/baselines/reference/contextualTypingArrayOfLambdas.types index d3e5b9942e3..08259aaa36c 100644 --- a/tests/baselines/reference/contextualTypingArrayOfLambdas.types +++ b/tests/baselines/reference/contextualTypingArrayOfLambdas.types @@ -8,7 +8,7 @@ class A { class B extends A { >B : B ->A : A +>A : typeof A bar: string; >bar : string @@ -16,7 +16,7 @@ class B extends A { class C extends A { >C : C ->A : A +>A : typeof A baz: string; >baz : string diff --git a/tests/baselines/reference/contextualTypingOfConditionalExpression.types b/tests/baselines/reference/contextualTypingOfConditionalExpression.types index a2e29a0e66b..b12b40022f2 100644 --- a/tests/baselines/reference/contextualTypingOfConditionalExpression.types +++ b/tests/baselines/reference/contextualTypingOfConditionalExpression.types @@ -25,14 +25,14 @@ class A { } class B extends A { >B : B ->A : A +>A : typeof A bar: number; >bar : number } class C extends A { >C : C ->A : A +>A : typeof A baz: number; >baz : number diff --git a/tests/baselines/reference/declFileAliasUseBeforeDeclaration2.types b/tests/baselines/reference/declFileAliasUseBeforeDeclaration2.types index 362dd031e09..15073c3eb01 100644 --- a/tests/baselines/reference/declFileAliasUseBeforeDeclaration2.types +++ b/tests/baselines/reference/declFileAliasUseBeforeDeclaration2.types @@ -10,7 +10,7 @@ declare module "test" { } class B extends E { >B : B ->E : E +>E : typeof E } import E = A.C; >E : typeof E diff --git a/tests/baselines/reference/declFileForFunctionTypeAsTypeParameter.types b/tests/baselines/reference/declFileForFunctionTypeAsTypeParameter.types index 5f759fb423f..508deef385d 100644 --- a/tests/baselines/reference/declFileForFunctionTypeAsTypeParameter.types +++ b/tests/baselines/reference/declFileForFunctionTypeAsTypeParameter.types @@ -6,7 +6,7 @@ class X { } class C extends X<() => number> { >C : C ->X : X +>X : typeof X } interface I extends X<() => number> { >I : I diff --git a/tests/baselines/reference/declFileGenericClassWithGenericExtendedClass.types b/tests/baselines/reference/declFileGenericClassWithGenericExtendedClass.types index 27fed37c21b..7cef23491ae 100644 --- a/tests/baselines/reference/declFileGenericClassWithGenericExtendedClass.types +++ b/tests/baselines/reference/declFileGenericClassWithGenericExtendedClass.types @@ -13,7 +13,7 @@ class Base { } class Derived extends Base { } >Derived : Derived >T : T ->Base : Base +>Base : typeof Base >T : T interface IBar { diff --git a/tests/baselines/reference/declFileGenericType.types b/tests/baselines/reference/declFileGenericType.types index 7aa20187890..71c65ab0c10 100644 --- a/tests/baselines/reference/declFileGenericType.types +++ b/tests/baselines/reference/declFileGenericType.types @@ -153,9 +153,9 @@ export var g = C.F5>(); export class h extends C.A{ } >h : h ->C.A : any +>C.A : typeof C.A >C : typeof C ->A : C.A +>A : typeof C.A >C : any >B : C.B diff --git a/tests/baselines/reference/declFileGenericType2.types b/tests/baselines/reference/declFileGenericType2.types index e1e1aa0bbfb..d14915fcad4 100644 --- a/tests/baselines/reference/declFileGenericType2.types +++ b/tests/baselines/reference/declFileGenericType2.types @@ -86,11 +86,11 @@ module templa.dom.mvc { >templa : any >mvc : any >IModel : templa.mvc.IModel ->templa.mvc.AbstractController : any +>templa.mvc.AbstractController : typeof templa.mvc.AbstractController >templa.mvc : typeof templa.mvc >templa : typeof templa >mvc : typeof templa.mvc ->AbstractController : templa.mvc.AbstractController +>AbstractController : typeof templa.mvc.AbstractController >ModelType : ModelType >IElementController : IElementController >ModelType : ModelType @@ -116,13 +116,13 @@ module templa.dom.mvc.composite { >mvc : any >composite : any >ICompositeControllerModel : templa.mvc.composite.ICompositeControllerModel ->templa.dom.mvc.AbstractElementController : any +>templa.dom.mvc.AbstractElementController : typeof AbstractElementController >templa.dom.mvc : typeof mvc >templa.dom : typeof dom >templa : typeof templa >dom : typeof dom >mvc : typeof mvc ->AbstractElementController : AbstractElementController +>AbstractElementController : typeof AbstractElementController >ModelType : ModelType public _controllers: templa.mvc.IController[]; diff --git a/tests/baselines/reference/declFileWithClassNameConflictingWithClassReferredByExtendsClause.types b/tests/baselines/reference/declFileWithClassNameConflictingWithClassReferredByExtendsClause.types index 56e1d07d0ec..bec86debf3a 100644 --- a/tests/baselines/reference/declFileWithClassNameConflictingWithClassReferredByExtendsClause.types +++ b/tests/baselines/reference/declFileWithClassNameConflictingWithClassReferredByExtendsClause.types @@ -19,13 +19,13 @@ module X.Y.base { export class W extends A.B.Base.W { >W : W ->A.B.Base.W : any +>A.B.Base.W : typeof A.B.Base.W >A.B.Base : typeof A.B.Base >A.B : typeof A.B >A : typeof A >B : typeof A.B >Base : typeof A.B.Base ->W : A.B.Base.W +>W : typeof A.B.Base.W name: string; >name : string @@ -41,13 +41,13 @@ module X.Y.base.Z { export class W extends X.Y.base.W { >W : W >TValue : TValue ->X.Y.base.W : any +>X.Y.base.W : typeof base.W >X.Y.base : typeof base >X.Y : typeof Y >X : typeof X >Y : typeof Y >base : typeof base ->W : base.W +>W : typeof base.W value: boolean; >value : boolean diff --git a/tests/baselines/reference/declFileWithExtendsClauseThatHasItsContainerNameConflict.types b/tests/baselines/reference/declFileWithExtendsClauseThatHasItsContainerNameConflict.types index 4dae0d42c53..f5918630a4c 100644 --- a/tests/baselines/reference/declFileWithExtendsClauseThatHasItsContainerNameConflict.types +++ b/tests/baselines/reference/declFileWithExtendsClauseThatHasItsContainerNameConflict.types @@ -30,7 +30,7 @@ module A.B.C { export class ContextMenu extends EventManager { >ContextMenu : ContextMenu ->EventManager : EventManager +>EventManager : typeof EventManager name: string; >name : string diff --git a/tests/baselines/reference/declarationEmit_nameConflicts3.types b/tests/baselines/reference/declarationEmit_nameConflicts3.types index 8d52bda68f5..5f2e32120b7 100644 --- a/tests/baselines/reference/declarationEmit_nameConflicts3.types +++ b/tests/baselines/reference/declarationEmit_nameConflicts3.types @@ -37,7 +37,7 @@ module M.P { } export class E extends C { } >E : E ->C : C +>C : typeof C export enum D { >D : D diff --git a/tests/baselines/reference/declarationEmit_protectedMembers.types b/tests/baselines/reference/declarationEmit_protectedMembers.types index 89aa3f56332..c3f191f9247 100644 --- a/tests/baselines/reference/declarationEmit_protectedMembers.types +++ b/tests/baselines/reference/declarationEmit_protectedMembers.types @@ -48,7 +48,7 @@ class C1 { // Derived class overriding protected members class C2 extends C1 { >C2 : C2 ->C1 : C1 +>C1 : typeof C1 protected f() { >f : () => number @@ -81,7 +81,7 @@ class C2 extends C1 { // Derived class making protected members public class C3 extends C2 { >C3 : C3 ->C2 : C2 +>C2 : typeof C2 x: number; >x : number diff --git a/tests/baselines/reference/declareDottedExtend.types b/tests/baselines/reference/declareDottedExtend.types index 7df6c9ecb7c..10380d0b864 100644 --- a/tests/baselines/reference/declareDottedExtend.types +++ b/tests/baselines/reference/declareDottedExtend.types @@ -14,15 +14,15 @@ import ab = A.B; class D extends ab.C{ } >D : D ->ab.C : any +>ab.C : typeof ab.C >ab : typeof ab ->C : ab.C +>C : typeof ab.C class E extends A.B.C{ } >E : E ->A.B.C : any +>A.B.C : typeof ab.C >A.B : typeof ab >A : typeof A >B : typeof ab ->C : ab.C +>C : typeof ab.C diff --git a/tests/baselines/reference/derivedClassOverridesIndexersWithAssignmentCompatibility.types b/tests/baselines/reference/derivedClassOverridesIndexersWithAssignmentCompatibility.types index 97940edc6e7..fa60f03d295 100644 --- a/tests/baselines/reference/derivedClassOverridesIndexersWithAssignmentCompatibility.types +++ b/tests/baselines/reference/derivedClassOverridesIndexersWithAssignmentCompatibility.types @@ -10,7 +10,7 @@ class Base { // ok, use assignment compatibility class Derived extends Base { >Derived : Derived ->Base : Base +>Base : typeof Base [x: string]: any; >x : string @@ -27,7 +27,7 @@ class Base2 { // ok, use assignment compatibility class Derived2 extends Base2 { >Derived2 : Derived2 ->Base2 : Base2 +>Base2 : typeof Base2 [x: number]: any; >x : number diff --git a/tests/baselines/reference/derivedClassOverridesProtectedMembers.types b/tests/baselines/reference/derivedClassOverridesProtectedMembers.types index 2695cbabe34..1e672636d14 100644 --- a/tests/baselines/reference/derivedClassOverridesProtectedMembers.types +++ b/tests/baselines/reference/derivedClassOverridesProtectedMembers.types @@ -65,7 +65,7 @@ class Base { class Derived extends Base { >Derived : Derived ->Base : Base +>Base : typeof Base protected a: typeof y; >a : { foo: string; bar: string; } diff --git a/tests/baselines/reference/derivedClassOverridesProtectedMembers2.types b/tests/baselines/reference/derivedClassOverridesProtectedMembers2.types index 2799555a3a2..b99be02adab 100644 --- a/tests/baselines/reference/derivedClassOverridesProtectedMembers2.types +++ b/tests/baselines/reference/derivedClassOverridesProtectedMembers2.types @@ -65,7 +65,7 @@ constructor(a: typeof x) { } // Increase visibility of all protected members to public class Derived extends Base { >Derived : Derived ->Base : Base +>Base : typeof Base a: typeof y; >a : { foo: string; bar: string; } @@ -208,7 +208,7 @@ class Base2 { class Derived2 extends Base2 { >Derived2 : Derived2 ->Base2 : Base2 +>Base2 : typeof Base2 [i: string]: typeof x; >i : string diff --git a/tests/baselines/reference/derivedClassOverridesWithoutSubtype.types b/tests/baselines/reference/derivedClassOverridesWithoutSubtype.types index a46c8efa408..d46039d8508 100644 --- a/tests/baselines/reference/derivedClassOverridesWithoutSubtype.types +++ b/tests/baselines/reference/derivedClassOverridesWithoutSubtype.types @@ -12,7 +12,7 @@ class Base { class Derived extends Base { >Derived : Derived ->Base : Base +>Base : typeof Base x: { >x : { foo: any; } @@ -35,7 +35,7 @@ class Base2 { class Derived2 extends Base2 { >Derived2 : Derived2 ->Base2 : Base2 +>Base2 : typeof Base2 static y: { >y : { foo: any; } diff --git a/tests/baselines/reference/derivedClasses.types b/tests/baselines/reference/derivedClasses.types index 906cfb2741c..5cabca32463 100644 --- a/tests/baselines/reference/derivedClasses.types +++ b/tests/baselines/reference/derivedClasses.types @@ -1,7 +1,7 @@ === tests/cases/compiler/derivedClasses.ts === class Red extends Color { >Red : Red ->Color : Color +>Color : typeof Color public shade() { >shade : () => string @@ -36,7 +36,7 @@ class Color { class Blue extends Color { >Blue : Blue ->Color : Color +>Color : typeof Color public shade() { >shade : () => string diff --git a/tests/baselines/reference/derivedTypeAccessesHiddenBaseCallViaSuperPropertyAccess.types b/tests/baselines/reference/derivedTypeAccessesHiddenBaseCallViaSuperPropertyAccess.types index d8d9f657255..8421e6a0820 100644 --- a/tests/baselines/reference/derivedTypeAccessesHiddenBaseCallViaSuperPropertyAccess.types +++ b/tests/baselines/reference/derivedTypeAccessesHiddenBaseCallViaSuperPropertyAccess.types @@ -15,7 +15,7 @@ class Base { class Derived extends Base { >Derived : Derived ->Base : Base +>Base : typeof Base foo(x: { a: number; b: number }): { a: number; b: number } { >foo : (x: { a: number; b: number; }) => { a: number; b: number; } diff --git a/tests/baselines/reference/derivedTypeDoesNotRequireExtendsClause.types b/tests/baselines/reference/derivedTypeDoesNotRequireExtendsClause.types index 36b85d7950c..f34220eda8f 100644 --- a/tests/baselines/reference/derivedTypeDoesNotRequireExtendsClause.types +++ b/tests/baselines/reference/derivedTypeDoesNotRequireExtendsClause.types @@ -18,7 +18,7 @@ class Derived { class Derived2 extends Base { >Derived2 : Derived2 ->Base : Base +>Base : typeof Base bar: string; >bar : string diff --git a/tests/baselines/reference/emitClassDeclarationWithExtensionAndTypeArgumentInES6.types b/tests/baselines/reference/emitClassDeclarationWithExtensionAndTypeArgumentInES6.types index 0f546fa7b86..eba51d0997d 100644 --- a/tests/baselines/reference/emitClassDeclarationWithExtensionAndTypeArgumentInES6.types +++ b/tests/baselines/reference/emitClassDeclarationWithExtensionAndTypeArgumentInES6.types @@ -9,11 +9,11 @@ class B { } class C extends B { } >C : C ->B : B +>B : typeof B class D extends B { >D : D ->B : B +>B : typeof B constructor(a: any) >a : any diff --git a/tests/baselines/reference/emitClassDeclarationWithExtensionInES6.types b/tests/baselines/reference/emitClassDeclarationWithExtensionInES6.types index 7267af2fde0..073e4ebf5ec 100644 --- a/tests/baselines/reference/emitClassDeclarationWithExtensionInES6.types +++ b/tests/baselines/reference/emitClassDeclarationWithExtensionInES6.types @@ -10,7 +10,7 @@ class B { } class C extends B { >C : C ->B : B +>B : typeof B foo() { } >foo : () => void @@ -31,7 +31,7 @@ class C extends B { } class D extends C { >D : D ->C : C +>C : typeof C constructor() { super(); diff --git a/tests/baselines/reference/emitClassDeclarationWithPropertyAssignmentInES6.types b/tests/baselines/reference/emitClassDeclarationWithPropertyAssignmentInES6.types index f3504d655ed..8157c2243a5 100644 --- a/tests/baselines/reference/emitClassDeclarationWithPropertyAssignmentInES6.types +++ b/tests/baselines/reference/emitClassDeclarationWithPropertyAssignmentInES6.types @@ -29,7 +29,7 @@ class D { class E extends D{ >E : E ->D : D +>D : typeof D z: boolean = true; >z : boolean @@ -38,7 +38,7 @@ class E extends D{ class F extends D{ >F : F ->D : D +>D : typeof D z: boolean = true; >z : boolean diff --git a/tests/baselines/reference/emitClassDeclarationWithSuperMethodCall01.types b/tests/baselines/reference/emitClassDeclarationWithSuperMethodCall01.types index 8b68af897ac..a61c40696fc 100644 --- a/tests/baselines/reference/emitClassDeclarationWithSuperMethodCall01.types +++ b/tests/baselines/reference/emitClassDeclarationWithSuperMethodCall01.types @@ -10,7 +10,7 @@ class Parent { class Foo extends Parent { >Foo : Foo ->Parent : Parent +>Parent : typeof Parent foo() { >foo : () => void diff --git a/tests/baselines/reference/es6ClassSuperCodegenBug.types b/tests/baselines/reference/es6ClassSuperCodegenBug.types index bdf8ebde8f2..09b79d345b5 100644 --- a/tests/baselines/reference/es6ClassSuperCodegenBug.types +++ b/tests/baselines/reference/es6ClassSuperCodegenBug.types @@ -8,7 +8,7 @@ class A { } class B extends A { >B : B ->A : A +>A : typeof A constructor() { if (true) { diff --git a/tests/baselines/reference/es6ClassTest7.types b/tests/baselines/reference/es6ClassTest7.types index f92ddad6e82..83f03ed4076 100644 --- a/tests/baselines/reference/es6ClassTest7.types +++ b/tests/baselines/reference/es6ClassTest7.types @@ -9,8 +9,8 @@ declare module M { class Bar extends M.Foo { >Bar : Bar ->M.Foo : any +>M.Foo : typeof M.Foo >M : typeof M ->Foo : M.Foo +>Foo : typeof M.Foo } diff --git a/tests/baselines/reference/exportAssignmentOfGenericType1.types b/tests/baselines/reference/exportAssignmentOfGenericType1.types index 1bf3e7454a7..e06b4fb527a 100644 --- a/tests/baselines/reference/exportAssignmentOfGenericType1.types +++ b/tests/baselines/reference/exportAssignmentOfGenericType1.types @@ -5,7 +5,7 @@ import q = require("exportAssignmentOfGenericType1_0"); class M extends q { } >M : M ->q : q +>q : typeof q var m: M; >m : M diff --git a/tests/baselines/reference/extBaseClass1.types b/tests/baselines/reference/extBaseClass1.types index b476e1b4206..a2c5d5a6bc6 100644 --- a/tests/baselines/reference/extBaseClass1.types +++ b/tests/baselines/reference/extBaseClass1.types @@ -12,7 +12,7 @@ module M { export class C extends B { >C : C ->B : B +>B : typeof B } } @@ -21,7 +21,7 @@ module M { export class C2 extends B { >C2 : C2 ->B : B +>B : typeof B } } @@ -30,9 +30,9 @@ module N { export class C3 extends M.B { >C3 : C3 ->M.B : any +>M.B : typeof M.B >M : typeof M ->B : M.B +>B : typeof M.B } } diff --git a/tests/baselines/reference/extendAndImplementTheSameBaseType.types b/tests/baselines/reference/extendAndImplementTheSameBaseType.types index 136308b3887..da14105f398 100644 --- a/tests/baselines/reference/extendAndImplementTheSameBaseType.types +++ b/tests/baselines/reference/extendAndImplementTheSameBaseType.types @@ -10,7 +10,7 @@ class C { } class D extends C implements C { >D : D ->C : C +>C : typeof C >C : C baz() { } diff --git a/tests/baselines/reference/extendBaseClassBeforeItsDeclared.types b/tests/baselines/reference/extendBaseClassBeforeItsDeclared.types index a9ad130d474..b386e494bd7 100644 --- a/tests/baselines/reference/extendBaseClassBeforeItsDeclared.types +++ b/tests/baselines/reference/extendBaseClassBeforeItsDeclared.types @@ -1,7 +1,7 @@ === tests/cases/compiler/extendBaseClassBeforeItsDeclared.ts === class derived extends base { } >derived : derived ->base : base +>base : typeof base class base { constructor (public n: number) { } } >base : base diff --git a/tests/baselines/reference/extendNonClassSymbol1.symbols b/tests/baselines/reference/extendNonClassSymbol1.symbols new file mode 100644 index 00000000000..02291ebb181 --- /dev/null +++ b/tests/baselines/reference/extendNonClassSymbol1.symbols @@ -0,0 +1,12 @@ +=== tests/cases/compiler/extendNonClassSymbol1.ts === +class A { foo() { } } +>A : Symbol(A, Decl(extendNonClassSymbol1.ts, 0, 0)) +>foo : Symbol(foo, Decl(extendNonClassSymbol1.ts, 0, 9)) + +var x = A; +>x : Symbol(x, Decl(extendNonClassSymbol1.ts, 1, 3)) +>A : Symbol(A, Decl(extendNonClassSymbol1.ts, 0, 0)) + +class C extends x { } // error, could not find symbol xs +>C : Symbol(C, Decl(extendNonClassSymbol1.ts, 1, 10)) + diff --git a/tests/baselines/reference/extendNonClassSymbol1.types b/tests/baselines/reference/extendNonClassSymbol1.types new file mode 100644 index 00000000000..1c627656ce0 --- /dev/null +++ b/tests/baselines/reference/extendNonClassSymbol1.types @@ -0,0 +1,13 @@ +=== tests/cases/compiler/extendNonClassSymbol1.ts === +class A { foo() { } } +>A : A +>foo : () => void + +var x = A; +>x : typeof A +>A : typeof A + +class C extends x { } // error, could not find symbol xs +>C : C +>x : typeof A + diff --git a/tests/baselines/reference/extendingClassFromAliasAndUsageInIndexer.types b/tests/baselines/reference/extendingClassFromAliasAndUsageInIndexer.types index 5b9154516c5..8bc97eb26d8 100644 --- a/tests/baselines/reference/extendingClassFromAliasAndUsageInIndexer.types +++ b/tests/baselines/reference/extendingClassFromAliasAndUsageInIndexer.types @@ -61,9 +61,9 @@ import Backbone = require("extendingClassFromAliasAndUsageInIndexer_backbone"); export class VisualizationModel extends Backbone.Model { >VisualizationModel : VisualizationModel ->Backbone.Model : any +>Backbone.Model : typeof Backbone.Model >Backbone : typeof Backbone ->Model : Backbone.Model +>Model : typeof Backbone.Model // interesting stuff here } @@ -74,9 +74,9 @@ import Backbone = require("extendingClassFromAliasAndUsageInIndexer_backbone"); export class VisualizationModel extends Backbone.Model { >VisualizationModel : VisualizationModel ->Backbone.Model : any +>Backbone.Model : typeof Backbone.Model >Backbone : typeof Backbone ->Model : Backbone.Model +>Model : typeof Backbone.Model // different interesting stuff here } diff --git a/tests/baselines/reference/functionImplementations.types b/tests/baselines/reference/functionImplementations.types index f277821d696..674c111e341 100644 --- a/tests/baselines/reference/functionImplementations.types +++ b/tests/baselines/reference/functionImplementations.types @@ -190,7 +190,7 @@ class Base { private m; } class Derived extends Base { private q; } >Derived : Derived ->Base : Base +>Base : typeof Base >q : any var b: Base; @@ -311,7 +311,7 @@ function f6(): number { class Derived2 extends Base { private r: string; } >Derived2 : Derived2 ->Base : Base +>Base : typeof Base >r : string class AnotherClass { private x } diff --git a/tests/baselines/reference/functionSubtypingOfVarArgs.types b/tests/baselines/reference/functionSubtypingOfVarArgs.types index ebd706e94cf..48f8b272560 100644 --- a/tests/baselines/reference/functionSubtypingOfVarArgs.types +++ b/tests/baselines/reference/functionSubtypingOfVarArgs.types @@ -24,7 +24,7 @@ class EventBase { class StringEvent extends EventBase { // should work >StringEvent : StringEvent ->EventBase : EventBase +>EventBase : typeof EventBase add(listener: (items: string) => void ) { // valid, items is subtype of args >add : (listener: (items: string) => void) => void diff --git a/tests/baselines/reference/functionSubtypingOfVarArgs2.types b/tests/baselines/reference/functionSubtypingOfVarArgs2.types index 5e2b14ffc7a..e2d344dabca 100644 --- a/tests/baselines/reference/functionSubtypingOfVarArgs2.types +++ b/tests/baselines/reference/functionSubtypingOfVarArgs2.types @@ -25,7 +25,7 @@ class EventBase { class StringEvent extends EventBase { >StringEvent : StringEvent ->EventBase : EventBase +>EventBase : typeof EventBase add(listener: (items: string, moreitems: number) => void ) { >add : (listener: (items: string, moreitems: number) => void) => void diff --git a/tests/baselines/reference/generatedContextualTyping.types b/tests/baselines/reference/generatedContextualTyping.types index e8f434d31a8..9b6a332a63e 100644 --- a/tests/baselines/reference/generatedContextualTyping.types +++ b/tests/baselines/reference/generatedContextualTyping.types @@ -5,12 +5,12 @@ class Base { private p; } class Derived1 extends Base { private m; } >Derived1 : Derived1 ->Base : Base +>Base : typeof Base >m : any class Derived2 extends Base { private n; } >Derived2 : Derived2 ->Base : Base +>Base : typeof Base >n : any interface Genric { func(n: T[]); } diff --git a/tests/baselines/reference/generatorTypeCheck17.types b/tests/baselines/reference/generatorTypeCheck17.types index 0ea7212040b..2768176c431 100644 --- a/tests/baselines/reference/generatorTypeCheck17.types +++ b/tests/baselines/reference/generatorTypeCheck17.types @@ -5,7 +5,7 @@ class Foo { x: number } class Bar extends Foo { y: string } >Bar : Bar ->Foo : Foo +>Foo : typeof Foo >y : string function* g(): IterableIterator { diff --git a/tests/baselines/reference/generatorTypeCheck19.types b/tests/baselines/reference/generatorTypeCheck19.types index 2b4f1396c2e..6877934ff0c 100644 --- a/tests/baselines/reference/generatorTypeCheck19.types +++ b/tests/baselines/reference/generatorTypeCheck19.types @@ -5,7 +5,7 @@ class Foo { x: number } class Bar extends Foo { y: string } >Bar : Bar ->Foo : Foo +>Foo : typeof Foo >y : string function* g(): IterableIterator { diff --git a/tests/baselines/reference/genericBaseClassLiteralProperty.types b/tests/baselines/reference/genericBaseClassLiteralProperty.types index 51246348ded..399e7f603af 100644 --- a/tests/baselines/reference/genericBaseClassLiteralProperty.types +++ b/tests/baselines/reference/genericBaseClassLiteralProperty.types @@ -14,7 +14,7 @@ class BaseClass { class SubClass extends BaseClass { >SubClass : SubClass ->BaseClass : BaseClass +>BaseClass : typeof BaseClass public Error(): void { >Error : () => void diff --git a/tests/baselines/reference/genericBaseClassLiteralProperty2.types b/tests/baselines/reference/genericBaseClassLiteralProperty2.types index 4576ffb05de..db89f73db48 100644 --- a/tests/baselines/reference/genericBaseClassLiteralProperty2.types +++ b/tests/baselines/reference/genericBaseClassLiteralProperty2.types @@ -24,7 +24,7 @@ class BaseCollection2 { class DataView2 extends BaseCollection2 { >DataView2 : DataView2 ->BaseCollection2 : BaseCollection2 +>BaseCollection2 : typeof BaseCollection2 >CollectionItem2 : CollectionItem2 fillItems(item: CollectionItem2) { diff --git a/tests/baselines/reference/genericCallWithConstraintsTypeArgumentInference.types b/tests/baselines/reference/genericCallWithConstraintsTypeArgumentInference.types index dcff9ef8a16..29b41e12ee6 100644 --- a/tests/baselines/reference/genericCallWithConstraintsTypeArgumentInference.types +++ b/tests/baselines/reference/genericCallWithConstraintsTypeArgumentInference.types @@ -7,12 +7,12 @@ class Base { foo: string; } class Derived extends Base { bar: string; } >Derived : Derived ->Base : Base +>Base : typeof Base >bar : string class Derived2 extends Derived { baz: string; } >Derived2 : Derived2 ->Derived : Derived +>Derived : typeof Derived >baz : string var b: Base; diff --git a/tests/baselines/reference/genericCallWithObjectTypeArgs2.types b/tests/baselines/reference/genericCallWithObjectTypeArgs2.types index 08bce90b5de..7178caaef4f 100644 --- a/tests/baselines/reference/genericCallWithObjectTypeArgs2.types +++ b/tests/baselines/reference/genericCallWithObjectTypeArgs2.types @@ -7,14 +7,14 @@ class Base { } class Derived extends Base { >Derived : Derived ->Base : Base +>Base : typeof Base y: string; >y : string } class Derived2 extends Base { >Derived2 : Derived2 ->Base : Base +>Base : typeof Base z: string; >z : string diff --git a/tests/baselines/reference/genericCallWithObjectTypeArgsAndConstraints2.types b/tests/baselines/reference/genericCallWithObjectTypeArgsAndConstraints2.types index 8ffa07252bc..a870a02420a 100644 --- a/tests/baselines/reference/genericCallWithObjectTypeArgsAndConstraints2.types +++ b/tests/baselines/reference/genericCallWithObjectTypeArgsAndConstraints2.types @@ -10,7 +10,7 @@ class Base { } class Derived extends Base { >Derived : Derived ->Base : Base +>Base : typeof Base y: string; >y : string diff --git a/tests/baselines/reference/genericCallbacksAndClassHierarchy.types b/tests/baselines/reference/genericCallbacksAndClassHierarchy.types index 97e584dca3f..419ec874859 100644 --- a/tests/baselines/reference/genericCallbacksAndClassHierarchy.types +++ b/tests/baselines/reference/genericCallbacksAndClassHierarchy.types @@ -31,7 +31,7 @@ module M { export class B extends C1> { } >B : B >T : T ->C1 : C1 +>C1 : typeof C1 >A : A >T : T diff --git a/tests/baselines/reference/genericClassInheritsConstructorFromNonGenericClass.types b/tests/baselines/reference/genericClassInheritsConstructorFromNonGenericClass.types index 800b215f123..74ad65993e4 100644 --- a/tests/baselines/reference/genericClassInheritsConstructorFromNonGenericClass.types +++ b/tests/baselines/reference/genericClassInheritsConstructorFromNonGenericClass.types @@ -1,12 +1,12 @@ === tests/cases/compiler/genericClassInheritsConstructorFromNonGenericClass.ts === class A extends B { } >A : A ->B : B +>B : typeof B class B extends C { } >B : B >U : U ->C : C +>C : typeof C class C { >C : C diff --git a/tests/baselines/reference/genericClassPropertyInheritanceSpecialization.types b/tests/baselines/reference/genericClassPropertyInheritanceSpecialization.types index 6ba27a66399..ce93a483415 100644 --- a/tests/baselines/reference/genericClassPropertyInheritanceSpecialization.types +++ b/tests/baselines/reference/genericClassPropertyInheritanceSpecialization.types @@ -192,13 +192,13 @@ module PortalFx.ViewModels.Controls.Validators { export class Validator extends Portal.Controls.Validators.Validator { >Validator : Validator >TValue : TValue ->Portal.Controls.Validators.Validator : any +>Portal.Controls.Validators.Validator : typeof Portal.Controls.Validators.Validator >Portal.Controls.Validators : typeof Portal.Controls.Validators >Portal.Controls : typeof Portal.Controls >Portal : typeof Portal >Controls : typeof Portal.Controls >Validators : typeof Portal.Controls.Validators ->Validator : Portal.Controls.Validators.Validator +>Validator : typeof Portal.Controls.Validators.Validator >TValue : TValue constructor(message?: string) { diff --git a/tests/baselines/reference/genericClassStaticMethod.types b/tests/baselines/reference/genericClassStaticMethod.types index 3d4c02317d6..fb38898d8a5 100644 --- a/tests/baselines/reference/genericClassStaticMethod.types +++ b/tests/baselines/reference/genericClassStaticMethod.types @@ -11,7 +11,7 @@ class Foo { class Bar extends Foo { >Bar : Bar >T : T ->Foo : Foo +>Foo : typeof Foo >T : T static getFoo() { diff --git a/tests/baselines/reference/genericClasses3.types b/tests/baselines/reference/genericClasses3.types index ea0ebcd2cc7..6bf78807e89 100644 --- a/tests/baselines/reference/genericClasses3.types +++ b/tests/baselines/reference/genericClasses3.types @@ -15,7 +15,7 @@ class B { class C extends B { >C : C >T : T ->B : B +>B : typeof B >T : T public x: T; diff --git a/tests/baselines/reference/genericConstraintOnExtendedBuiltinTypes.types b/tests/baselines/reference/genericConstraintOnExtendedBuiltinTypes.types index f1041cfa80f..2b870347f3c 100644 --- a/tests/baselines/reference/genericConstraintOnExtendedBuiltinTypes.types +++ b/tests/baselines/reference/genericConstraintOnExtendedBuiltinTypes.types @@ -53,7 +53,7 @@ module EndGate.Tweening { export class NumberTween extends Tween{ >NumberTween : NumberTween ->Tween : Tween +>Tween : typeof Tween constructor(from: number) { >from : number diff --git a/tests/baselines/reference/genericConstraintOnExtendedBuiltinTypes2.types b/tests/baselines/reference/genericConstraintOnExtendedBuiltinTypes2.types index 92ffa7c5c03..4e8a3f094d9 100644 --- a/tests/baselines/reference/genericConstraintOnExtendedBuiltinTypes2.types +++ b/tests/baselines/reference/genericConstraintOnExtendedBuiltinTypes2.types @@ -52,7 +52,7 @@ module EndGate.Tweening { export class NumberTween extends Tween{ >NumberTween : NumberTween ->Tween : Tween +>Tween : typeof Tween >Number : Number constructor(from: number) { diff --git a/tests/baselines/reference/genericPrototypeProperty2.types b/tests/baselines/reference/genericPrototypeProperty2.types index 1c95041b650..2e3594f6a22 100644 --- a/tests/baselines/reference/genericPrototypeProperty2.types +++ b/tests/baselines/reference/genericPrototypeProperty2.types @@ -15,7 +15,7 @@ class MyEvent extends BaseEvent { >MyEvent : MyEvent >T : T >EventTarget : EventTarget ->BaseEvent : BaseEvent +>BaseEvent : typeof BaseEvent target: T; >target : T @@ -31,7 +31,7 @@ class BaseEventWrapper { class MyEventWrapper extends BaseEventWrapper { >MyEventWrapper : MyEventWrapper ->BaseEventWrapper : BaseEventWrapper +>BaseEventWrapper : typeof BaseEventWrapper t: MyEvent; // any satisfies constraint and passes assignability check between 'target' properties >t : MyEvent diff --git a/tests/baselines/reference/genericPrototypeProperty3.types b/tests/baselines/reference/genericPrototypeProperty3.types index 5a190164642..aaa319f8dcc 100644 --- a/tests/baselines/reference/genericPrototypeProperty3.types +++ b/tests/baselines/reference/genericPrototypeProperty3.types @@ -9,7 +9,7 @@ class BaseEvent { class MyEvent extends BaseEvent { // T is instantiated to any in the prototype, which is assignable to {} >MyEvent : MyEvent >T : T ->BaseEvent : BaseEvent +>BaseEvent : typeof BaseEvent target: T; >target : T @@ -25,7 +25,7 @@ class BaseEventWrapper { class MyEventWrapper extends BaseEventWrapper { >MyEventWrapper : MyEventWrapper ->BaseEventWrapper : BaseEventWrapper +>BaseEventWrapper : typeof BaseEventWrapper t: MyEvent; >t : MyEvent diff --git a/tests/baselines/reference/genericRecursiveImplicitConstructorErrors2.types b/tests/baselines/reference/genericRecursiveImplicitConstructorErrors2.types index 2f62a20c415..52ec7e4c5bc 100644 --- a/tests/baselines/reference/genericRecursiveImplicitConstructorErrors2.types +++ b/tests/baselines/reference/genericRecursiveImplicitConstructorErrors2.types @@ -62,7 +62,7 @@ module TypeScript2 { >A : A >B : B >C : C ->PullSymbol : PullSymbol +>PullSymbol : typeof PullSymbol } } diff --git a/tests/baselines/reference/genericWithIndexerOfTypeParameterType2.types b/tests/baselines/reference/genericWithIndexerOfTypeParameterType2.types index e1cdfa85f13..c30eda7f9ee 100644 --- a/tests/baselines/reference/genericWithIndexerOfTypeParameterType2.types +++ b/tests/baselines/reference/genericWithIndexerOfTypeParameterType2.types @@ -12,7 +12,7 @@ export class Collection { export class List extends Collection{ >List : List ->Collection : Collection +>Collection : typeof Collection >ListItem : ListItem Bar() {} @@ -24,7 +24,7 @@ export class CollectionItem {} export class ListItem extends CollectionItem { >ListItem : ListItem ->CollectionItem : CollectionItem +>CollectionItem : typeof CollectionItem __isNew: boolean; >__isNew : boolean diff --git a/tests/baselines/reference/heterogeneousArrayLiterals.types b/tests/baselines/reference/heterogeneousArrayLiterals.types index ecfbf75e864..8585ef59316 100644 --- a/tests/baselines/reference/heterogeneousArrayLiterals.types +++ b/tests/baselines/reference/heterogeneousArrayLiterals.types @@ -121,12 +121,12 @@ class Base { foo: string; } class Derived extends Base { bar: string; } >Derived : Derived ->Base : Base +>Base : typeof Base >bar : string class Derived2 extends Base { baz: string; } >Derived2 : Derived2 ->Base : Base +>Base : typeof Base >baz : string var base: Base; diff --git a/tests/baselines/reference/ifDoWhileStatements.types b/tests/baselines/reference/ifDoWhileStatements.types index 92a9df6a4dd..42668f96f22 100644 --- a/tests/baselines/reference/ifDoWhileStatements.types +++ b/tests/baselines/reference/ifDoWhileStatements.types @@ -19,7 +19,7 @@ class C implements I { class C2 extends C { >C2 : C2 ->C : C +>C : typeof C valid: boolean; >valid : boolean diff --git a/tests/baselines/reference/importShadowsGlobalName.types b/tests/baselines/reference/importShadowsGlobalName.types index a1f1106f1b8..973f81287c8 100644 --- a/tests/baselines/reference/importShadowsGlobalName.types +++ b/tests/baselines/reference/importShadowsGlobalName.types @@ -4,7 +4,7 @@ import Error = require('Foo'); class Bar extends Error {} >Bar : Bar ->Error : Error +>Error : typeof Error export = Bar; >Bar : Bar diff --git a/tests/baselines/reference/importUsedInExtendsList1.types b/tests/baselines/reference/importUsedInExtendsList1.types index 74737c4db96..120f5a31444 100644 --- a/tests/baselines/reference/importUsedInExtendsList1.types +++ b/tests/baselines/reference/importUsedInExtendsList1.types @@ -5,9 +5,9 @@ import foo = require('importUsedInExtendsList1_require'); class Sub extends foo.Super { } >Sub : Sub ->foo.Super : any +>foo.Super : typeof foo.Super >foo : typeof foo ->Super : foo.Super +>Super : typeof foo.Super var s: Sub; >s : Sub diff --git a/tests/baselines/reference/infinitelyExpandingTypesNonGenericBase.types b/tests/baselines/reference/infinitelyExpandingTypesNonGenericBase.types index 9190ef15779..a09c8b0f448 100644 --- a/tests/baselines/reference/infinitelyExpandingTypesNonGenericBase.types +++ b/tests/baselines/reference/infinitelyExpandingTypesNonGenericBase.types @@ -16,7 +16,7 @@ class Base { class A extends Base { >A : A >T : T ->Base : Base +>Base : typeof Base options: Options[]>; >options : Options[]> diff --git a/tests/baselines/reference/inheritSameNamePrivatePropertiesFromSameOrigin.types b/tests/baselines/reference/inheritSameNamePrivatePropertiesFromSameOrigin.types index e8f05ca474d..086f5a20c61 100644 --- a/tests/baselines/reference/inheritSameNamePrivatePropertiesFromSameOrigin.types +++ b/tests/baselines/reference/inheritSameNamePrivatePropertiesFromSameOrigin.types @@ -7,11 +7,11 @@ class B { } class C extends B { } >C : C ->B : B +>B : typeof B class C2 extends B { } >C2 : C2 ->B : B +>B : typeof B interface A extends C, C2 { // ok >A : A diff --git a/tests/baselines/reference/inheritanceMemberFuncOverridingMethod.types b/tests/baselines/reference/inheritanceMemberFuncOverridingMethod.types index 3f170d1a6ec..44b0e7db937 100644 --- a/tests/baselines/reference/inheritanceMemberFuncOverridingMethod.types +++ b/tests/baselines/reference/inheritanceMemberFuncOverridingMethod.types @@ -12,7 +12,7 @@ class a { class b extends a { >b : b ->a : a +>a : typeof a x() { >x : () => string diff --git a/tests/baselines/reference/inheritanceMemberPropertyOverridingProperty.types b/tests/baselines/reference/inheritanceMemberPropertyOverridingProperty.types index d5f846187f8..a2709758a5c 100644 --- a/tests/baselines/reference/inheritanceMemberPropertyOverridingProperty.types +++ b/tests/baselines/reference/inheritanceMemberPropertyOverridingProperty.types @@ -8,7 +8,7 @@ class a { class b extends a { >b : b ->a : a +>a : typeof a x: () => string; >x : () => string diff --git a/tests/baselines/reference/inheritanceOfGenericConstructorMethod1.types b/tests/baselines/reference/inheritanceOfGenericConstructorMethod1.types index d18b02ec8d0..3005a22871f 100644 --- a/tests/baselines/reference/inheritanceOfGenericConstructorMethod1.types +++ b/tests/baselines/reference/inheritanceOfGenericConstructorMethod1.types @@ -6,7 +6,7 @@ class A { } class B extends A {} >B : B >T : T ->A : A +>A : typeof A >T : T var a = new A(); diff --git a/tests/baselines/reference/inheritanceOfGenericConstructorMethod2.types b/tests/baselines/reference/inheritanceOfGenericConstructorMethod2.types index 119b6a19046..d77e5b55e49 100644 --- a/tests/baselines/reference/inheritanceOfGenericConstructorMethod2.types +++ b/tests/baselines/reference/inheritanceOfGenericConstructorMethod2.types @@ -14,16 +14,16 @@ module N { export class D1 extends M.C1 { } >D1 : D1 ->M.C1 : any +>M.C1 : typeof M.C1 >M : typeof M ->C1 : M.C1 +>C1 : typeof M.C1 export class D2 extends M.C2 { } >D2 : D2 >T : T ->M.C2 : any +>M.C2 : typeof M.C2 >M : typeof M ->C2 : M.C2 +>C2 : typeof M.C2 >T : T } diff --git a/tests/baselines/reference/inheritanceStaticFuncOverridingMethod.types b/tests/baselines/reference/inheritanceStaticFuncOverridingMethod.types index 22fa0a6660f..e2ddfcb2254 100644 --- a/tests/baselines/reference/inheritanceStaticFuncOverridingMethod.types +++ b/tests/baselines/reference/inheritanceStaticFuncOverridingMethod.types @@ -12,7 +12,7 @@ class a { class b extends a { >b : b ->a : a +>a : typeof a static x() { >x : () => string diff --git a/tests/baselines/reference/inheritanceStaticFuncOverridingPropertyOfFuncType.types b/tests/baselines/reference/inheritanceStaticFuncOverridingPropertyOfFuncType.types index a7df20382ec..9e7372f25d0 100644 --- a/tests/baselines/reference/inheritanceStaticFuncOverridingPropertyOfFuncType.types +++ b/tests/baselines/reference/inheritanceStaticFuncOverridingPropertyOfFuncType.types @@ -8,7 +8,7 @@ class a { class b extends a { >b : b ->a : a +>a : typeof a static x() { >x : () => string diff --git a/tests/baselines/reference/inheritanceStaticFunctionOverridingInstanceProperty.types b/tests/baselines/reference/inheritanceStaticFunctionOverridingInstanceProperty.types index 4742dde63f6..624ea629e33 100644 --- a/tests/baselines/reference/inheritanceStaticFunctionOverridingInstanceProperty.types +++ b/tests/baselines/reference/inheritanceStaticFunctionOverridingInstanceProperty.types @@ -8,7 +8,7 @@ class a { class b extends a { >b : b ->a : a +>a : typeof a static x() { >x : () => string diff --git a/tests/baselines/reference/inheritanceStaticMembersCompatible.types b/tests/baselines/reference/inheritanceStaticMembersCompatible.types index cab8be93785..5bec0707b04 100644 --- a/tests/baselines/reference/inheritanceStaticMembersCompatible.types +++ b/tests/baselines/reference/inheritanceStaticMembersCompatible.types @@ -9,7 +9,7 @@ class a { class b extends a { >b : b ->a : a +>a : typeof a static x: b; >x : b diff --git a/tests/baselines/reference/inheritanceStaticPropertyOverridingProperty.types b/tests/baselines/reference/inheritanceStaticPropertyOverridingProperty.types index 958fb6723cc..5d627af6788 100644 --- a/tests/baselines/reference/inheritanceStaticPropertyOverridingProperty.types +++ b/tests/baselines/reference/inheritanceStaticPropertyOverridingProperty.types @@ -8,7 +8,7 @@ class a { class b extends a { >b : b ->a : a +>a : typeof a static x: () => string; >x : () => string diff --git a/tests/baselines/reference/instantiatedReturnTypeContravariance.types b/tests/baselines/reference/instantiatedReturnTypeContravariance.types index 1de1b8b7151..de4199d835c 100644 --- a/tests/baselines/reference/instantiatedReturnTypeContravariance.types +++ b/tests/baselines/reference/instantiatedReturnTypeContravariance.types @@ -28,7 +28,7 @@ return null; class d extends c { >d : d ->c : c +>c : typeof c foo(): B { >foo : () => B diff --git a/tests/baselines/reference/interfaceExtendsClass1.types b/tests/baselines/reference/interfaceExtendsClass1.types index c2370f7fe7f..06c46488942 100644 --- a/tests/baselines/reference/interfaceExtendsClass1.types +++ b/tests/baselines/reference/interfaceExtendsClass1.types @@ -14,21 +14,21 @@ interface SelectableControl extends Control { } class Button extends Control { >Button : Button ->Control : Control +>Control : typeof Control select() { } >select : () => void } class TextBox extends Control { >TextBox : TextBox ->Control : Control +>Control : typeof Control select() { } >select : () => void } class Image extends Control { >Image : Image ->Control : Control +>Control : typeof Control } class Location { >Location : Location diff --git a/tests/baselines/reference/iterableArrayPattern11.types b/tests/baselines/reference/iterableArrayPattern11.types index 3118e748d6f..819743bad59 100644 --- a/tests/baselines/reference/iterableArrayPattern11.types +++ b/tests/baselines/reference/iterableArrayPattern11.types @@ -18,7 +18,7 @@ class Bar { x } class Foo extends Bar { y } >Foo : Foo ->Bar : Bar +>Bar : typeof Bar >y : any class FooIterator { diff --git a/tests/baselines/reference/iterableArrayPattern12.types b/tests/baselines/reference/iterableArrayPattern12.types index b32c2ff7dc8..2f468dc89ca 100644 --- a/tests/baselines/reference/iterableArrayPattern12.types +++ b/tests/baselines/reference/iterableArrayPattern12.types @@ -18,7 +18,7 @@ class Bar { x } class Foo extends Bar { y } >Foo : Foo ->Bar : Bar +>Bar : typeof Bar >y : any class FooIterator { diff --git a/tests/baselines/reference/iterableArrayPattern13.types b/tests/baselines/reference/iterableArrayPattern13.types index 556a871f5a8..cc3a15d85d4 100644 --- a/tests/baselines/reference/iterableArrayPattern13.types +++ b/tests/baselines/reference/iterableArrayPattern13.types @@ -16,7 +16,7 @@ class Bar { x } class Foo extends Bar { y } >Foo : Foo ->Bar : Bar +>Bar : typeof Bar >y : any class FooIterator { diff --git a/tests/baselines/reference/iterableArrayPattern3.types b/tests/baselines/reference/iterableArrayPattern3.types index fed5c7f07d3..91b359b4d68 100644 --- a/tests/baselines/reference/iterableArrayPattern3.types +++ b/tests/baselines/reference/iterableArrayPattern3.types @@ -19,7 +19,7 @@ class Bar { x } class Foo extends Bar { y } >Foo : Foo ->Bar : Bar +>Bar : typeof Bar >y : any class FooIterator { diff --git a/tests/baselines/reference/iterableArrayPattern4.types b/tests/baselines/reference/iterableArrayPattern4.types index 8f05a454b53..d4f697fe432 100644 --- a/tests/baselines/reference/iterableArrayPattern4.types +++ b/tests/baselines/reference/iterableArrayPattern4.types @@ -20,7 +20,7 @@ class Bar { x } class Foo extends Bar { y } >Foo : Foo ->Bar : Bar +>Bar : typeof Bar >y : any class FooIterator { diff --git a/tests/baselines/reference/iterableArrayPattern9.types b/tests/baselines/reference/iterableArrayPattern9.types index 03cfa31b621..c58f87fcfdd 100644 --- a/tests/baselines/reference/iterableArrayPattern9.types +++ b/tests/baselines/reference/iterableArrayPattern9.types @@ -12,7 +12,7 @@ class Bar { x } class Foo extends Bar { y } >Foo : Foo ->Bar : Bar +>Bar : typeof Bar >y : any class FooIterator { diff --git a/tests/baselines/reference/localTypes1.types b/tests/baselines/reference/localTypes1.types index 1770a36edb7..cfab2a2f9b4 100644 --- a/tests/baselines/reference/localTypes1.types +++ b/tests/baselines/reference/localTypes1.types @@ -340,7 +340,7 @@ function f6() { class B extends A { >B : B ->A : A +>A : typeof A b: string; >b : string @@ -350,7 +350,7 @@ function f6() { class C extends B { >C : C ->B : B +>B : typeof B c: string; >c : string diff --git a/tests/baselines/reference/m7Bugs.types b/tests/baselines/reference/m7Bugs.types index fa627f20cf7..1c676f00e97 100644 --- a/tests/baselines/reference/m7Bugs.types +++ b/tests/baselines/reference/m7Bugs.types @@ -41,7 +41,7 @@ class C1 { class C2 extends C1 {} >C2 : C2 ->C1 : C1 +>C1 : typeof C1 var y1: C1 = new C2(); >y1 : C1 diff --git a/tests/baselines/reference/moduleImportedForTypeArgumentPosition.types b/tests/baselines/reference/moduleImportedForTypeArgumentPosition.types index 0a85e6e0002..3e3a6b5cc1d 100644 --- a/tests/baselines/reference/moduleImportedForTypeArgumentPosition.types +++ b/tests/baselines/reference/moduleImportedForTypeArgumentPosition.types @@ -9,7 +9,7 @@ class C1{ } class Test1 extends C1 { >Test1 : Test1 ->C1 : C1 +>C1 : typeof C1 >M2 : any >M2C : M2.M2C } diff --git a/tests/baselines/reference/moduleWithStatementsOfEveryKind.types b/tests/baselines/reference/moduleWithStatementsOfEveryKind.types index 9475d9cfdcb..e2d2ef16773 100644 --- a/tests/baselines/reference/moduleWithStatementsOfEveryKind.types +++ b/tests/baselines/reference/moduleWithStatementsOfEveryKind.types @@ -18,14 +18,14 @@ module A { class B extends AA implements I { id: number } >B : B ->AA : AA +>AA : typeof AA >I : I >id : number class BB extends A { >BB : BB >T : T ->A : A +>A : typeof A id: number; >id : number @@ -106,14 +106,14 @@ module Y { export class B extends AA implements I { id: number } >B : B ->AA : AA +>AA : typeof AA >I : I >id : number export class BB extends A { >BB : BB >T : T ->A : A +>A : typeof A id: number; >id : number diff --git a/tests/baselines/reference/mutuallyRecursiveGenericBaseTypes2.types b/tests/baselines/reference/mutuallyRecursiveGenericBaseTypes2.types index ac722f8a063..fd0f5034488 100644 --- a/tests/baselines/reference/mutuallyRecursiveGenericBaseTypes2.types +++ b/tests/baselines/reference/mutuallyRecursiveGenericBaseTypes2.types @@ -13,7 +13,7 @@ class foo class foo2 extends foo { >foo2 : foo2 >T : T ->foo : foo +>foo : typeof foo >T : T } diff --git a/tests/baselines/reference/noEmitHelpers.types b/tests/baselines/reference/noEmitHelpers.types index 01c5d5acb3d..07c16def25d 100644 --- a/tests/baselines/reference/noEmitHelpers.types +++ b/tests/baselines/reference/noEmitHelpers.types @@ -5,5 +5,5 @@ class A { } class B extends A { } >B : B ->A : A +>A : typeof A diff --git a/tests/baselines/reference/nonGenericClassExtendingGenericClassWithAny.types b/tests/baselines/reference/nonGenericClassExtendingGenericClassWithAny.types index 177becac643..2dfbe2e6ffc 100644 --- a/tests/baselines/reference/nonGenericClassExtendingGenericClassWithAny.types +++ b/tests/baselines/reference/nonGenericClassExtendingGenericClassWithAny.types @@ -10,5 +10,5 @@ class Foo { class Bar extends Foo { } // Valid >Bar : Bar ->Foo : Foo +>Foo : typeof Foo diff --git a/tests/baselines/reference/numericIndexerConstraint3.types b/tests/baselines/reference/numericIndexerConstraint3.types index 2e249c89b8c..dfb58408bb5 100644 --- a/tests/baselines/reference/numericIndexerConstraint3.types +++ b/tests/baselines/reference/numericIndexerConstraint3.types @@ -8,7 +8,7 @@ class A { class B extends A { >B : B ->A : A +>A : typeof A bar: string; >bar : string diff --git a/tests/baselines/reference/numericIndexerConstraint4.types b/tests/baselines/reference/numericIndexerConstraint4.types index 97e72b5088d..e174b6718a1 100644 --- a/tests/baselines/reference/numericIndexerConstraint4.types +++ b/tests/baselines/reference/numericIndexerConstraint4.types @@ -8,7 +8,7 @@ class A { class B extends A { >B : B ->A : A +>A : typeof A bar: string; >bar : string diff --git a/tests/baselines/reference/objectTypesIdentityWithNumericIndexers1.types b/tests/baselines/reference/objectTypesIdentityWithNumericIndexers1.types index 2284d06ffbd..f933c3a9e81 100644 --- a/tests/baselines/reference/objectTypesIdentityWithNumericIndexers1.types +++ b/tests/baselines/reference/objectTypesIdentityWithNumericIndexers1.types @@ -33,12 +33,12 @@ interface I { class PA extends A { >PA : PA ->A : A +>A : typeof A } class PB extends B { >PB : PB ->B : B +>B : typeof B } var a: { diff --git a/tests/baselines/reference/objectTypesIdentityWithNumericIndexers2.types b/tests/baselines/reference/objectTypesIdentityWithNumericIndexers2.types index 1a580297b1b..d6de1fa313b 100644 --- a/tests/baselines/reference/objectTypesIdentityWithNumericIndexers2.types +++ b/tests/baselines/reference/objectTypesIdentityWithNumericIndexers2.types @@ -7,7 +7,7 @@ class Base { foo: string; } class Derived extends Base { bar: string; } >Derived : Derived ->Base : Base +>Base : typeof Base >bar : string class A { @@ -45,12 +45,12 @@ interface I { class PA extends A { >PA : PA ->A : A +>A : typeof A } class PB extends B { >PB : PB ->B : B +>B : typeof B } var a: { diff --git a/tests/baselines/reference/objectTypesIdentityWithNumericIndexers3.types b/tests/baselines/reference/objectTypesIdentityWithNumericIndexers3.types index ae384bbb4db..3a80a2420df 100644 --- a/tests/baselines/reference/objectTypesIdentityWithNumericIndexers3.types +++ b/tests/baselines/reference/objectTypesIdentityWithNumericIndexers3.types @@ -33,12 +33,12 @@ interface I { class PA extends A { >PA : PA ->A : A +>A : typeof A } class PB extends B { >PB : PB ->B : B +>B : typeof B } var a: { diff --git a/tests/baselines/reference/objectTypesIdentityWithPrivates.types b/tests/baselines/reference/objectTypesIdentityWithPrivates.types index c828f45ac5a..cea0c3a1559 100644 --- a/tests/baselines/reference/objectTypesIdentityWithPrivates.types +++ b/tests/baselines/reference/objectTypesIdentityWithPrivates.types @@ -33,12 +33,12 @@ interface I { class PA extends A { >PA : PA ->A : A +>A : typeof A } class PB extends B { >PB : PB ->B : B +>B : typeof B } var a: { foo: string; } diff --git a/tests/baselines/reference/objectTypesIdentityWithPrivates2.types b/tests/baselines/reference/objectTypesIdentityWithPrivates2.types index a29edc75162..ea04e50fb0d 100644 --- a/tests/baselines/reference/objectTypesIdentityWithPrivates2.types +++ b/tests/baselines/reference/objectTypesIdentityWithPrivates2.types @@ -13,7 +13,7 @@ class C { class D extends C { >D : D >T : T ->C : C +>C : typeof C >T : T } diff --git a/tests/baselines/reference/objectTypesIdentityWithStringIndexers.types b/tests/baselines/reference/objectTypesIdentityWithStringIndexers.types index a7eeb672504..ed4ba4f3d36 100644 --- a/tests/baselines/reference/objectTypesIdentityWithStringIndexers.types +++ b/tests/baselines/reference/objectTypesIdentityWithStringIndexers.types @@ -33,12 +33,12 @@ interface I { class PA extends A { >PA : PA ->A : A +>A : typeof A } class PB extends B { >PB : PB ->B : B +>B : typeof B } var a: { diff --git a/tests/baselines/reference/objectTypesIdentityWithStringIndexers2.types b/tests/baselines/reference/objectTypesIdentityWithStringIndexers2.types index d1394252117..e0de7d5a94d 100644 --- a/tests/baselines/reference/objectTypesIdentityWithStringIndexers2.types +++ b/tests/baselines/reference/objectTypesIdentityWithStringIndexers2.types @@ -7,7 +7,7 @@ class Base { foo: string; } class Derived extends Base { bar: string; } >Derived : Derived ->Base : Base +>Base : typeof Base >bar : string class A { @@ -45,12 +45,12 @@ interface I { class PA extends A { >PA : PA ->A : A +>A : typeof A } class PB extends B { >PB : PB ->B : B +>B : typeof B } var a: { diff --git a/tests/baselines/reference/optionalConstructorArgInSuper.types b/tests/baselines/reference/optionalConstructorArgInSuper.types index 26d4fcb9abb..91c12e34217 100644 --- a/tests/baselines/reference/optionalConstructorArgInSuper.types +++ b/tests/baselines/reference/optionalConstructorArgInSuper.types @@ -11,7 +11,7 @@ class Base { } class Derived extends Base { >Derived : Derived ->Base : Base +>Base : typeof Base } var d = new Derived(); // bug caused an error here, couldn't select overload >d : Derived diff --git a/tests/baselines/reference/optionalParamInOverride.types b/tests/baselines/reference/optionalParamInOverride.types index f4530dace61..7bc60b3fe1d 100644 --- a/tests/baselines/reference/optionalParamInOverride.types +++ b/tests/baselines/reference/optionalParamInOverride.types @@ -7,7 +7,7 @@ class Z { } class Y extends Z { >Y : Y ->Z : Z +>Z : typeof Z public func(value?: any): void { } >func : (value?: any) => void diff --git a/tests/baselines/reference/overloadOnConstConstraintChecks1.types b/tests/baselines/reference/overloadOnConstConstraintChecks1.types index cc561eb6e21..d3c10e9cbd9 100644 --- a/tests/baselines/reference/overloadOnConstConstraintChecks1.types +++ b/tests/baselines/reference/overloadOnConstConstraintChecks1.types @@ -5,17 +5,17 @@ class Base { foo() { } } class Derived1 extends Base { bar() { } } >Derived1 : Derived1 ->Base : Base +>Base : typeof Base >bar : () => void class Derived2 extends Base { baz() { } } >Derived2 : Derived2 ->Base : Base +>Base : typeof Base >baz : () => void class Derived3 extends Base { biz() { } } >Derived3 : Derived3 ->Base : Base +>Base : typeof Base >biz : () => void interface MyDoc { // Document diff --git a/tests/baselines/reference/overloadOnConstConstraintChecks2.types b/tests/baselines/reference/overloadOnConstConstraintChecks2.types index 36fa89dec4a..f571ee0275e 100644 --- a/tests/baselines/reference/overloadOnConstConstraintChecks2.types +++ b/tests/baselines/reference/overloadOnConstConstraintChecks2.types @@ -4,11 +4,11 @@ class A {} class B extends A {} >B : B ->A : A +>A : typeof A class C extends A { >C : C ->A : A +>A : typeof A public foo() { } >foo : () => void diff --git a/tests/baselines/reference/overloadOnConstConstraintChecks3.types b/tests/baselines/reference/overloadOnConstConstraintChecks3.types index 94a03bb7680..aaf79e2f35b 100644 --- a/tests/baselines/reference/overloadOnConstConstraintChecks3.types +++ b/tests/baselines/reference/overloadOnConstConstraintChecks3.types @@ -6,11 +6,11 @@ class A { private x = 1} class B extends A {} >B : B ->A : A +>A : typeof A class C extends A { >C : C ->A : A +>A : typeof A public foo() { } >foo : () => void diff --git a/tests/baselines/reference/privacyClass.types b/tests/baselines/reference/privacyClass.types index d42133ad9ec..10edc47fec8 100644 --- a/tests/baselines/reference/privacyClass.types +++ b/tests/baselines/reference/privacyClass.types @@ -24,19 +24,19 @@ export module m1 { class m1_C1_private extends m1_c_public { >m1_C1_private : m1_C1_private ->m1_c_public : m1_c_public +>m1_c_public : typeof m1_c_public } class m1_C2_private extends m1_c_private { >m1_C2_private : m1_C2_private ->m1_c_private : m1_c_private +>m1_c_private : typeof m1_c_private } export class m1_C3_public extends m1_c_public { >m1_C3_public : m1_C3_public ->m1_c_public : m1_c_public +>m1_c_public : typeof m1_c_public } export class m1_C4_public extends m1_c_private { >m1_C4_public : m1_C4_public ->m1_c_private : m1_c_private +>m1_c_private : typeof m1_c_private } class m1_C5_private implements m1_i_public { @@ -58,25 +58,25 @@ export module m1 { class m1_C9_private extends m1_c_public implements m1_i_private, m1_i_public { >m1_C9_private : m1_C9_private ->m1_c_public : m1_c_public +>m1_c_public : typeof m1_c_public >m1_i_private : m1_i_private >m1_i_public : m1_i_public } class m1_C10_private extends m1_c_private implements m1_i_private, m1_i_public { >m1_C10_private : m1_C10_private ->m1_c_private : m1_c_private +>m1_c_private : typeof m1_c_private >m1_i_private : m1_i_private >m1_i_public : m1_i_public } export class m1_C11_public extends m1_c_public implements m1_i_private, m1_i_public { >m1_C11_public : m1_C11_public ->m1_c_public : m1_c_public +>m1_c_public : typeof m1_c_public >m1_i_private : m1_i_private >m1_i_public : m1_i_public } export class m1_C12_public extends m1_c_private implements m1_i_private, m1_i_public { >m1_C12_public : m1_C12_public ->m1_c_private : m1_c_private +>m1_c_private : typeof m1_c_private >m1_i_private : m1_i_private >m1_i_public : m1_i_public } @@ -108,19 +108,19 @@ module m2 { class m2_C1_private extends m2_c_public { >m2_C1_private : m2_C1_private ->m2_c_public : m2_c_public +>m2_c_public : typeof m2_c_public } class m2_C2_private extends m2_c_private { >m2_C2_private : m2_C2_private ->m2_c_private : m2_c_private +>m2_c_private : typeof m2_c_private } export class m2_C3_public extends m2_c_public { >m2_C3_public : m2_C3_public ->m2_c_public : m2_c_public +>m2_c_public : typeof m2_c_public } export class m2_C4_public extends m2_c_private { >m2_C4_public : m2_C4_public ->m2_c_private : m2_c_private +>m2_c_private : typeof m2_c_private } class m2_C5_private implements m2_i_public { @@ -142,25 +142,25 @@ module m2 { class m2_C9_private extends m2_c_public implements m2_i_private, m2_i_public { >m2_C9_private : m2_C9_private ->m2_c_public : m2_c_public +>m2_c_public : typeof m2_c_public >m2_i_private : m2_i_private >m2_i_public : m2_i_public } class m2_C10_private extends m2_c_private implements m2_i_private, m2_i_public { >m2_C10_private : m2_C10_private ->m2_c_private : m2_c_private +>m2_c_private : typeof m2_c_private >m2_i_private : m2_i_private >m2_i_public : m2_i_public } export class m2_C11_public extends m2_c_public implements m2_i_private, m2_i_public { >m2_C11_public : m2_C11_public ->m2_c_public : m2_c_public +>m2_c_public : typeof m2_c_public >m2_i_private : m2_i_private >m2_i_public : m2_i_public } export class m2_C12_public extends m2_c_private implements m2_i_private, m2_i_public { >m2_C12_public : m2_C12_public ->m2_c_private : m2_c_private +>m2_c_private : typeof m2_c_private >m2_i_private : m2_i_private >m2_i_public : m2_i_public } @@ -188,19 +188,19 @@ class glo_c_private { class glo_C1_private extends glo_c_public { >glo_C1_private : glo_C1_private ->glo_c_public : glo_c_public +>glo_c_public : typeof glo_c_public } class glo_C2_private extends glo_c_private { >glo_C2_private : glo_C2_private ->glo_c_private : glo_c_private +>glo_c_private : typeof glo_c_private } export class glo_C3_public extends glo_c_public { >glo_C3_public : glo_C3_public ->glo_c_public : glo_c_public +>glo_c_public : typeof glo_c_public } export class glo_C4_public extends glo_c_private { >glo_C4_public : glo_C4_public ->glo_c_private : glo_c_private +>glo_c_private : typeof glo_c_private } class glo_C5_private implements glo_i_public { @@ -222,25 +222,25 @@ export class glo_C8_public implements glo_i_private { class glo_C9_private extends glo_c_public implements glo_i_private, glo_i_public { >glo_C9_private : glo_C9_private ->glo_c_public : glo_c_public +>glo_c_public : typeof glo_c_public >glo_i_private : glo_i_private >glo_i_public : glo_i_public } class glo_C10_private extends glo_c_private implements glo_i_private, glo_i_public { >glo_C10_private : glo_C10_private ->glo_c_private : glo_c_private +>glo_c_private : typeof glo_c_private >glo_i_private : glo_i_private >glo_i_public : glo_i_public } export class glo_C11_public extends glo_c_public implements glo_i_private, glo_i_public { >glo_C11_public : glo_C11_public ->glo_c_public : glo_c_public +>glo_c_public : typeof glo_c_public >glo_i_private : glo_i_private >glo_i_public : glo_i_public } export class glo_C12_public extends glo_c_private implements glo_i_private, glo_i_public { >glo_C12_public : glo_C12_public ->glo_c_private : glo_c_private +>glo_c_private : typeof glo_c_private >glo_i_private : glo_i_private >glo_i_public : glo_i_public } diff --git a/tests/baselines/reference/privacyGloClass.types b/tests/baselines/reference/privacyGloClass.types index be0c8a74dcc..5a5ee37f1a5 100644 --- a/tests/baselines/reference/privacyGloClass.types +++ b/tests/baselines/reference/privacyGloClass.types @@ -24,19 +24,19 @@ module m1 { class m1_C1_private extends m1_c_public { >m1_C1_private : m1_C1_private ->m1_c_public : m1_c_public +>m1_c_public : typeof m1_c_public } class m1_C2_private extends m1_c_private { >m1_C2_private : m1_C2_private ->m1_c_private : m1_c_private +>m1_c_private : typeof m1_c_private } export class m1_C3_public extends m1_c_public { >m1_C3_public : m1_C3_public ->m1_c_public : m1_c_public +>m1_c_public : typeof m1_c_public } export class m1_C4_public extends m1_c_private { >m1_C4_public : m1_C4_public ->m1_c_private : m1_c_private +>m1_c_private : typeof m1_c_private } class m1_C5_private implements m1_i_public { @@ -58,25 +58,25 @@ module m1 { class m1_C9_private extends m1_c_public implements m1_i_private, m1_i_public { >m1_C9_private : m1_C9_private ->m1_c_public : m1_c_public +>m1_c_public : typeof m1_c_public >m1_i_private : m1_i_private >m1_i_public : m1_i_public } class m1_C10_private extends m1_c_private implements m1_i_private, m1_i_public { >m1_C10_private : m1_C10_private ->m1_c_private : m1_c_private +>m1_c_private : typeof m1_c_private >m1_i_private : m1_i_private >m1_i_public : m1_i_public } export class m1_C11_public extends m1_c_public implements m1_i_private, m1_i_public { >m1_C11_public : m1_C11_public ->m1_c_public : m1_c_public +>m1_c_public : typeof m1_c_public >m1_i_private : m1_i_private >m1_i_public : m1_i_public } export class m1_C12_public extends m1_c_private implements m1_i_private, m1_i_public { >m1_C12_public : m1_C12_public ->m1_c_private : m1_c_private +>m1_c_private : typeof m1_c_private >m1_i_private : m1_i_private >m1_i_public : m1_i_public } @@ -96,7 +96,7 @@ class glo_c_public { class glo_C3_public extends glo_c_public { >glo_C3_public : glo_C3_public ->glo_c_public : glo_c_public +>glo_c_public : typeof glo_c_public } class glo_C7_public implements glo_i_public { @@ -106,7 +106,7 @@ class glo_C7_public implements glo_i_public { class glo_C11_public extends glo_c_public implements glo_i_public { >glo_C11_public : glo_C11_public ->glo_c_public : glo_c_public +>glo_c_public : typeof glo_c_public >glo_i_public : glo_i_public } diff --git a/tests/baselines/reference/propertyAccessOnTypeParameterWithConstraints2.types b/tests/baselines/reference/propertyAccessOnTypeParameterWithConstraints2.types index 9ea015cc9ce..fedeb79d7da 100644 --- a/tests/baselines/reference/propertyAccessOnTypeParameterWithConstraints2.types +++ b/tests/baselines/reference/propertyAccessOnTypeParameterWithConstraints2.types @@ -11,7 +11,7 @@ class A { class B extends A { >B : B ->A : A +>A : typeof A bar(): string { >bar : () => string diff --git a/tests/baselines/reference/protectedClassPropertyAccessibleWithinSubclass.types b/tests/baselines/reference/protectedClassPropertyAccessibleWithinSubclass.types index bd230239d47..aad8bcb8c90 100644 --- a/tests/baselines/reference/protectedClassPropertyAccessibleWithinSubclass.types +++ b/tests/baselines/reference/protectedClassPropertyAccessibleWithinSubclass.types @@ -13,7 +13,7 @@ class B { class C extends B { >C : C ->B : B +>B : typeof B protected get y() { return this.x; } >y : string diff --git a/tests/baselines/reference/recursiveBaseConstructorCreation1.types b/tests/baselines/reference/recursiveBaseConstructorCreation1.types index 4879fb260a3..081db0c0d51 100644 --- a/tests/baselines/reference/recursiveBaseConstructorCreation1.types +++ b/tests/baselines/reference/recursiveBaseConstructorCreation1.types @@ -9,7 +9,7 @@ public func(param: C2): any { } } class C2 extends C1 { } >C2 : C2 ->C1 : C1 +>C1 : typeof C1 var x = new C2(); // Valid >x : C2 diff --git a/tests/baselines/reference/recursiveBaseConstructorCreation2.types b/tests/baselines/reference/recursiveBaseConstructorCreation2.types index 00b72ee7d4f..c2fbdc80aca 100644 --- a/tests/baselines/reference/recursiveBaseConstructorCreation2.types +++ b/tests/baselines/reference/recursiveBaseConstructorCreation2.types @@ -5,7 +5,7 @@ declare class base } declare class abc extends base >abc : abc ->base : base +>base : typeof base { foo: xyz; >foo : xyz @@ -13,7 +13,7 @@ declare class abc extends base } declare class xyz extends abc >xyz : xyz ->abc : abc +>abc : typeof abc { } diff --git a/tests/baselines/reference/recursiveClassInstantiationsWithDefaultConstructors.types b/tests/baselines/reference/recursiveClassInstantiationsWithDefaultConstructors.types index 482ec707e49..dfaf97734f9 100644 --- a/tests/baselines/reference/recursiveClassInstantiationsWithDefaultConstructors.types +++ b/tests/baselines/reference/recursiveClassInstantiationsWithDefaultConstructors.types @@ -18,7 +18,7 @@ public prefix: string = ""; } export class MemberNameArray extends MemberName { >MemberNameArray : MemberNameArray ->MemberName : MemberName +>MemberName : typeof MemberName } } diff --git a/tests/baselines/reference/recursiveComplicatedClasses.types b/tests/baselines/reference/recursiveComplicatedClasses.types index 247b9ee27c5..d9e4f40f286 100644 --- a/tests/baselines/reference/recursiveComplicatedClasses.types +++ b/tests/baselines/reference/recursiveComplicatedClasses.types @@ -39,15 +39,15 @@ class Symbol { } class InferenceSymbol extends Symbol { >InferenceSymbol : InferenceSymbol ->Symbol : Symbol +>Symbol : typeof Symbol } class ParameterSymbol extends InferenceSymbol { >ParameterSymbol : ParameterSymbol ->InferenceSymbol : InferenceSymbol +>InferenceSymbol : typeof InferenceSymbol } class TypeSymbol extends InferenceSymbol { >TypeSymbol : TypeSymbol ->InferenceSymbol : InferenceSymbol +>InferenceSymbol : typeof InferenceSymbol } diff --git a/tests/baselines/reference/recursivelySpecializedConstructorDeclaration.types b/tests/baselines/reference/recursivelySpecializedConstructorDeclaration.types index bccd226ceba..ee15a2a44dd 100644 --- a/tests/baselines/reference/recursivelySpecializedConstructorDeclaration.types +++ b/tests/baselines/reference/recursivelySpecializedConstructorDeclaration.types @@ -29,7 +29,7 @@ module MsPortal.Controls.Base.ItemList { export class ViewModel extends ItemValue { >ViewModel : ViewModel >TValue : TValue ->ItemValue : ItemValue +>ItemValue : typeof ItemValue >TValue : TValue } } diff --git a/tests/baselines/reference/resolvingClassDeclarationWhenInBaseTypeResolution.types b/tests/baselines/reference/resolvingClassDeclarationWhenInBaseTypeResolution.types index 43db869265b..82ac92209a4 100644 --- a/tests/baselines/reference/resolvingClassDeclarationWhenInBaseTypeResolution.types +++ b/tests/baselines/reference/resolvingClassDeclarationWhenInBaseTypeResolution.types @@ -4,9 +4,9 @@ module rionegrensis { export class caniventer extends Lanthanum.nitidus { >caniventer : caniventer ->Lanthanum.nitidus : any +>Lanthanum.nitidus : typeof Lanthanum.nitidus >Lanthanum : typeof Lanthanum ->nitidus : Lanthanum.nitidus +>nitidus : typeof Lanthanum.nitidus >petrophilus : any >minutilla : petrophilus.minutilla >julianae : any @@ -90,9 +90,9 @@ module rionegrensis { >veraecrucis : veraecrucis >T0 : T0 >T1 : T1 ->trivirgatus.mixtus : any +>trivirgatus.mixtus : typeof trivirgatus.mixtus >trivirgatus : typeof trivirgatus ->mixtus : trivirgatus.mixtus +>mixtus : typeof trivirgatus.mixtus >gabriellae : any >amicus : gabriellae.amicus >lutreolus : any @@ -516,9 +516,9 @@ module julianae { >oralis : oralis >T0 : T0 >T1 : T1 ->caurinus.psilurus : any +>caurinus.psilurus : typeof caurinus.psilurus >caurinus : typeof caurinus ->psilurus : caurinus.psilurus +>psilurus : typeof caurinus.psilurus cepapi() : caurinus.psilurus { var x : caurinus.psilurus; () => { var y = this; }; return x; } >cepapi : () => caurinus.psilurus @@ -754,9 +754,9 @@ module julianae { } export class sumatrana extends Lanthanum.jugularis { >sumatrana : sumatrana ->Lanthanum.jugularis : any +>Lanthanum.jugularis : typeof Lanthanum.jugularis >Lanthanum : typeof Lanthanum ->jugularis : Lanthanum.jugularis +>jugularis : typeof Lanthanum.jugularis wolffsohni() : Lanthanum.suillus { var x : Lanthanum.suillus; () => { var y = this; }; return x; } >wolffsohni : () => Lanthanum.suillus @@ -1280,9 +1280,9 @@ module julianae { } export class durangae extends dogramacii.aurata { >durangae : durangae ->dogramacii.aurata : any +>dogramacii.aurata : typeof dogramacii.aurata >dogramacii : typeof dogramacii ->aurata : dogramacii.aurata +>aurata : typeof dogramacii.aurata Californium() : panamensis.setulosus { var x : panamensis.setulosus; () => { var y = this; }; return x; } >Californium : () => panamensis.setulosus @@ -1434,9 +1434,9 @@ module Lanthanum { >nitidus : nitidus >T0 : T0 >T1 : T1 ->argurus.gilbertii : any +>argurus.gilbertii : typeof argurus.gilbertii >argurus : typeof argurus ->gilbertii : argurus.gilbertii +>gilbertii : typeof argurus.gilbertii >lavali : any >thaeleri : lavali.thaeleri >lutreolus : any @@ -1604,9 +1604,9 @@ module Lanthanum { } export class megalonyx extends caurinus.johorensis { >megalonyx : megalonyx ->caurinus.johorensis : any +>caurinus.johorensis : typeof caurinus.johorensis >caurinus : typeof caurinus ->johorensis : caurinus.johorensis +>johorensis : typeof caurinus.johorensis >caurinus : any >megaphyllus : caurinus.megaphyllus >julianae : any @@ -1991,9 +1991,9 @@ module rendalli { export class zuluensis extends julianae.steerii { >zuluensis : zuluensis ->julianae.steerii : any +>julianae.steerii : typeof julianae.steerii >julianae : typeof julianae ->steerii : julianae.steerii +>steerii : typeof julianae.steerii telfairi() : argurus.wetmorei { var x : argurus.wetmorei; () => { var y = this; }; return x; } >telfairi : () => argurus.wetmorei @@ -2426,9 +2426,9 @@ module rendalli { >crenulata : crenulata >T0 : T0 >T1 : T1 ->trivirgatus.falconeri : any +>trivirgatus.falconeri : typeof trivirgatus.falconeri >trivirgatus : typeof trivirgatus ->falconeri : trivirgatus.falconeri +>falconeri : typeof trivirgatus.falconeri salvanius() : howi.coludo { var x : howi.coludo; () => { var y = this; }; return x; } >salvanius : () => howi.coludo @@ -2621,9 +2621,9 @@ module trivirgatus { >mixtus : mixtus >T0 : T0 >T1 : T1 ->argurus.pygmaea : any +>argurus.pygmaea : typeof argurus.pygmaea >argurus : typeof argurus ->pygmaea : argurus.pygmaea +>pygmaea : typeof argurus.pygmaea >argurus : any >oreas : argurus.oreas >panglima : any @@ -3359,9 +3359,9 @@ module ruatanica { export class americanus extends imperfecta.ciliolabrum { >americanus : americanus ->imperfecta.ciliolabrum : any +>imperfecta.ciliolabrum : typeof imperfecta.ciliolabrum >imperfecta : typeof imperfecta ->ciliolabrum : imperfecta.ciliolabrum +>ciliolabrum : typeof imperfecta.ciliolabrum >argurus : any >germaini : argurus.germaini >lutreolus : any @@ -3429,9 +3429,9 @@ module lavali { export class wilsoni extends Lanthanum.nitidus { >wilsoni : wilsoni ->Lanthanum.nitidus : any +>Lanthanum.nitidus : typeof Lanthanum.nitidus >Lanthanum : typeof Lanthanum ->nitidus : Lanthanum.nitidus +>nitidus : typeof Lanthanum.nitidus >rionegrensis : any >caniventer : rionegrensis.caniventer >Lanthanum : any @@ -3650,9 +3650,9 @@ module lavali { } export class otion extends howi.coludo { >otion : otion ->howi.coludo : any +>howi.coludo : typeof howi.coludo >howi : typeof howi ->coludo : howi.coludo +>coludo : typeof howi.coludo >argurus : any >oreas : argurus.oreas >howi : any @@ -4125,9 +4125,9 @@ module lavali { } export class thaeleri extends argurus.oreas { >thaeleri : thaeleri ->argurus.oreas : any +>argurus.oreas : typeof argurus.oreas >argurus : typeof argurus ->oreas : argurus.oreas +>oreas : typeof argurus.oreas coromandra() : julianae.galapagoensis { var x : julianae.galapagoensis; () => { var y = this; }; return x; } >coromandra : () => julianae.galapagoensis @@ -4289,9 +4289,9 @@ module lavali { } export class lepturus extends Lanthanum.suillus { >lepturus : lepturus ->Lanthanum.suillus : any +>Lanthanum.suillus : typeof Lanthanum.suillus >Lanthanum : typeof Lanthanum ->suillus : Lanthanum.suillus +>suillus : typeof Lanthanum.suillus >dammermani : any >melanops : dammermani.melanops >quasiater : any @@ -4365,9 +4365,9 @@ module dogramacii { export class robustulus extends lavali.wilsoni { >robustulus : robustulus ->lavali.wilsoni : any +>lavali.wilsoni : typeof lavali.wilsoni >lavali : typeof lavali ->wilsoni : lavali.wilsoni +>wilsoni : typeof lavali.wilsoni fossor() : minutus.inez { var x : minutus.inez; () => { var y = this; }; return x; } >fossor : () => minutus.inez @@ -4940,9 +4940,9 @@ module lutreolus { export class schlegeli extends lavali.beisa { >schlegeli : schlegeli ->lavali.beisa : any +>lavali.beisa : typeof lavali.beisa >lavali : typeof lavali ->beisa : lavali.beisa +>beisa : typeof lavali.beisa mittendorfi() : rionegrensis.caniventer { var x : rionegrensis.caniventer; () => { var y = this; }; return x; } >mittendorfi : () => rionegrensis.caniventer @@ -5678,9 +5678,9 @@ module panglima { >amphibius : amphibius >T0 : T0 >T1 : T1 ->caurinus.johorensis : any +>caurinus.johorensis : typeof caurinus.johorensis >caurinus : typeof caurinus ->johorensis : caurinus.johorensis +>johorensis : typeof caurinus.johorensis >Lanthanum : any >nitidus : Lanthanum.nitidus >petrophilus : any @@ -5812,9 +5812,9 @@ module panglima { >fundatus : fundatus >T0 : T0 >T1 : T1 ->lutreolus.schlegeli : any +>lutreolus.schlegeli : typeof lutreolus.schlegeli >lutreolus : typeof lutreolus ->schlegeli : lutreolus.schlegeli +>schlegeli : typeof lutreolus.schlegeli crassulus(): nigra.gracilis { var x: nigra.gracilis; () => { var y = this; }; return x; } >crassulus : () => nigra.gracilis @@ -5918,9 +5918,9 @@ module panglima { >abidi : abidi >T0 : T0 >T1 : T1 ->argurus.dauricus : any +>argurus.dauricus : typeof argurus.dauricus >argurus : typeof argurus ->dauricus : argurus.dauricus +>dauricus : typeof argurus.dauricus >argurus : any >germaini : argurus.germaini >julianae : any @@ -6133,9 +6133,9 @@ module minutus { >himalayana : himalayana >T0 : T0 >T1 : T1 ->lutreolus.punicus : any +>lutreolus.punicus : typeof lutreolus.punicus >lutreolus : typeof lutreolus ->punicus : lutreolus.punicus +>punicus : typeof lutreolus.punicus simoni(): argurus.netscheri> { var x: argurus.netscheri>; () => { var y = this; }; return x; } >simoni : () => argurus.netscheri> @@ -6377,9 +6377,9 @@ module caurinus { >mahaganus : mahaganus >T0 : T0 >T1 : T1 ->panglima.fundatus : any +>panglima.fundatus : typeof panglima.fundatus >panglima : typeof panglima ->fundatus : panglima.fundatus +>fundatus : typeof panglima.fundatus >quasiater : any >carolinensis : quasiater.carolinensis >macrorhinos : any @@ -6606,9 +6606,9 @@ module howi { >angulatus : angulatus >T0 : T0 >T1 : T1 ->sagitta.stolzmanni : any +>sagitta.stolzmanni : typeof sagitta.stolzmanni >sagitta : typeof sagitta ->stolzmanni : sagitta.stolzmanni +>stolzmanni : typeof sagitta.stolzmanni pennatus(): howi.marcanoi { var x: howi.marcanoi; () => { var y = this; }; return x; } >pennatus : () => marcanoi @@ -6814,9 +6814,9 @@ module sagitta { export class walkeri extends minutus.portoricensis { >walkeri : walkeri ->minutus.portoricensis : any +>minutus.portoricensis : typeof minutus.portoricensis >minutus : typeof minutus ->portoricensis : minutus.portoricensis +>portoricensis : typeof minutus.portoricensis maracajuensis(): samarensis.cahirinus { var x: samarensis.cahirinus; () => { var y = this; }; return x; } >maracajuensis : () => samarensis.cahirinus @@ -6846,9 +6846,9 @@ module minutus { >inez : inez >T0 : T0 >T1 : T1 ->samarensis.pelurus : any +>samarensis.pelurus : typeof samarensis.pelurus >samarensis : typeof samarensis ->pelurus : samarensis.pelurus +>pelurus : typeof samarensis.pelurus >argurus : any >germaini : argurus.germaini >julianae : any @@ -6880,9 +6880,9 @@ module macrorhinos { export class konganensis extends imperfecta.lasiurus { >konganensis : konganensis ->imperfecta.lasiurus : any +>imperfecta.lasiurus : typeof imperfecta.lasiurus >imperfecta : typeof imperfecta ->lasiurus : imperfecta.lasiurus +>lasiurus : typeof imperfecta.lasiurus >caurinus : any >psilurus : caurinus.psilurus >caurinus : any @@ -6896,9 +6896,9 @@ module panamensis { >linulus : linulus >T0 : T0 >T1 : T1 ->ruatanica.hector : any +>ruatanica.hector : typeof ruatanica.hector >ruatanica : typeof ruatanica ->hector : ruatanica.hector +>hector : typeof ruatanica.hector >julianae : any >sumatrana : julianae.sumatrana >samarensis : any @@ -7357,9 +7357,9 @@ module samarensis { >pelurus : pelurus >T0 : T0 >T1 : T1 ->sagitta.stolzmanni : any +>sagitta.stolzmanni : typeof sagitta.stolzmanni >sagitta : typeof sagitta ->stolzmanni : sagitta.stolzmanni +>stolzmanni : typeof sagitta.stolzmanni Palladium(): panamensis.linulus { var x: panamensis.linulus; () => { var y = this; }; return x; } >Palladium : () => panamensis.linulus @@ -7615,9 +7615,9 @@ module samarensis { >fuscus : fuscus >T0 : T0 >T1 : T1 ->macrorhinos.daphaenodon : any +>macrorhinos.daphaenodon : typeof macrorhinos.daphaenodon >macrorhinos : typeof macrorhinos ->daphaenodon : macrorhinos.daphaenodon +>daphaenodon : typeof macrorhinos.daphaenodon planifrons(): nigra.gracilis { var x: nigra.gracilis; () => { var y = this; }; return x; } >planifrons : () => nigra.gracilis @@ -8093,9 +8093,9 @@ module sagitta { >leptoceros : leptoceros >T0 : T0 >T1 : T1 ->caurinus.johorensis : any +>caurinus.johorensis : typeof caurinus.johorensis >caurinus : typeof caurinus ->johorensis : caurinus.johorensis +>johorensis : typeof caurinus.johorensis >argurus : any >peninsulae : argurus.peninsulae >daubentonii : any @@ -8205,9 +8205,9 @@ module daubentonii { >nigricans : nigricans >T0 : T0 >T1 : T1 ->sagitta.stolzmanni : any +>sagitta.stolzmanni : typeof sagitta.stolzmanni >sagitta : typeof sagitta ->stolzmanni : sagitta.stolzmanni +>stolzmanni : typeof sagitta.stolzmanni woosnami(): dogramacii.robustulus { var x: dogramacii.robustulus; () => { var y = this; }; return x; } >woosnami : () => dogramacii.robustulus @@ -8238,9 +8238,9 @@ module argurus { >pygmaea : pygmaea >T0 : T0 >T1 : T1 ->rendalli.moojeni : any +>rendalli.moojeni : typeof rendalli.moojeni >rendalli : typeof rendalli ->moojeni : rendalli.moojeni +>moojeni : typeof rendalli.moojeni >macrorhinos : any >konganensis : macrorhinos.konganensis >gabriellae : any @@ -8290,9 +8290,9 @@ module chrysaeolus { >sarasinorum : sarasinorum >T0 : T0 >T1 : T1 ->caurinus.psilurus : any +>caurinus.psilurus : typeof caurinus.psilurus >caurinus : typeof caurinus ->psilurus : caurinus.psilurus +>psilurus : typeof caurinus.psilurus belzebul(): samarensis.pallidus { var x: samarensis.pallidus; () => { var y = this; }; return x; } >belzebul : () => samarensis.pallidus @@ -8533,9 +8533,9 @@ module argurus { export class oreas extends lavali.wilsoni { >oreas : oreas ->lavali.wilsoni : any +>lavali.wilsoni : typeof lavali.wilsoni >lavali : typeof lavali ->wilsoni : lavali.wilsoni +>wilsoni : typeof lavali.wilsoni salamonis(): lavali.xanthognathus { var x: lavali.xanthognathus; () => { var y = this; }; return x; } >salamonis : () => lavali.xanthognathus @@ -9163,9 +9163,9 @@ module provocax { export class melanoleuca extends lavali.wilsoni { >melanoleuca : melanoleuca ->lavali.wilsoni : any +>lavali.wilsoni : typeof lavali.wilsoni >lavali : typeof lavali ->wilsoni : lavali.wilsoni +>wilsoni : typeof lavali.wilsoni Neodymium(): macrorhinos.marmosurus, lutreolus.foina> { var x: macrorhinos.marmosurus, lutreolus.foina>; () => { var y = this; }; return x; } >Neodymium : () => macrorhinos.marmosurus, lutreolus.foina> @@ -9310,9 +9310,9 @@ module howi { export class marcanoi extends Lanthanum.megalonyx { >marcanoi : marcanoi ->Lanthanum.megalonyx : any +>Lanthanum.megalonyx : typeof Lanthanum.megalonyx >Lanthanum : typeof Lanthanum ->megalonyx : Lanthanum.megalonyx +>megalonyx : typeof Lanthanum.megalonyx formosae(): Lanthanum.megalonyx { var x: Lanthanum.megalonyx; () => { var y = this; }; return x; } >formosae : () => Lanthanum.megalonyx @@ -10398,9 +10398,9 @@ module gabriellae { >klossii : klossii >T0 : T0 >T1 : T1 ->imperfecta.lasiurus : any +>imperfecta.lasiurus : typeof imperfecta.lasiurus >imperfecta : typeof imperfecta ->lasiurus : imperfecta.lasiurus +>lasiurus : typeof imperfecta.lasiurus >dogramacii : any >robustulus : dogramacii.robustulus >caurinus : any @@ -10908,9 +10908,9 @@ module imperfecta { >ciliolabrum : ciliolabrum >T0 : T0 >T1 : T1 ->dogramacii.robustulus : any +>dogramacii.robustulus : typeof dogramacii.robustulus >dogramacii : typeof dogramacii ->robustulus : dogramacii.robustulus +>robustulus : typeof dogramacii.robustulus leschenaultii(): argurus.dauricus> { var x: argurus.dauricus>; () => { var y = this; }; return x; } >leschenaultii : () => argurus.dauricus> @@ -11072,9 +11072,9 @@ module petrophilus { >sodyi : sodyi >T0 : T0 >T1 : T1 ->quasiater.bobrinskoi : any +>quasiater.bobrinskoi : typeof quasiater.bobrinskoi >quasiater : typeof quasiater ->bobrinskoi : quasiater.bobrinskoi +>bobrinskoi : typeof quasiater.bobrinskoi saundersiae(): samarensis.pallidus { var x: samarensis.pallidus; () => { var y = this; }; return x; } >saundersiae : () => samarensis.pallidus @@ -11206,9 +11206,9 @@ module caurinus { export class megaphyllus extends imperfecta.lasiurus> { >megaphyllus : megaphyllus ->imperfecta.lasiurus : any +>imperfecta.lasiurus : typeof imperfecta.lasiurus >imperfecta : typeof imperfecta ->lasiurus : imperfecta.lasiurus +>lasiurus : typeof imperfecta.lasiurus >julianae : any >acariensis : julianae.acariensis >howi : any @@ -11640,9 +11640,9 @@ module lutreolus { >cor : cor >T0 : T0 >T1 : T1 ->panglima.fundatus : any +>panglima.fundatus : typeof panglima.fundatus >panglima : typeof panglima ->fundatus : panglima.fundatus +>fundatus : typeof panglima.fundatus >panamensis : any >linulus : panamensis.linulus >trivirgatus : any @@ -11887,9 +11887,9 @@ module argurus { export class germaini extends gabriellae.amicus { >germaini : germaini ->gabriellae.amicus : any +>gabriellae.amicus : typeof gabriellae.amicus >gabriellae : typeof gabriellae ->amicus : gabriellae.amicus +>amicus : typeof gabriellae.amicus sharpei(): lavali.wilsoni { var x: lavali.wilsoni; () => { var y = this; }; return x; } >sharpei : () => lavali.wilsoni @@ -12100,9 +12100,9 @@ module dammermani { export class melanops extends minutus.inez { >melanops : melanops ->minutus.inez : any +>minutus.inez : typeof minutus.inez >minutus : typeof minutus ->inez : minutus.inez +>inez : typeof minutus.inez >sagitta : any >stolzmanni : sagitta.stolzmanni >dammermani : any @@ -12350,9 +12350,9 @@ module argurus { export class peninsulae extends patas.uralensis { >peninsulae : peninsulae ->patas.uralensis : any +>patas.uralensis : typeof patas.uralensis >patas : typeof patas ->uralensis : patas.uralensis +>uralensis : typeof patas.uralensis aitkeni(): trivirgatus.mixtus, panglima.amphibius> { var x: trivirgatus.mixtus, panglima.amphibius>; () => { var y = this; }; return x; } >aitkeni : () => trivirgatus.mixtus, panglima.amphibius> @@ -12815,9 +12815,9 @@ module ruatanica { >Praseodymium : Praseodymium >T0 : T0 >T1 : T1 ->ruatanica.hector : any +>ruatanica.hector : typeof hector >ruatanica : typeof ruatanica ->hector : hector +>hector : typeof hector >lutreolus : any >punicus : lutreolus.punicus >gabriellae : any @@ -13163,9 +13163,9 @@ module caurinus { >johorensis : johorensis >T0 : T0 >T1 : T1 ->lutreolus.punicus : any +>lutreolus.punicus : typeof lutreolus.punicus >lutreolus : typeof lutreolus ->punicus : lutreolus.punicus +>punicus : typeof lutreolus.punicus maini(): ruatanica.Praseodymium { var x: ruatanica.Praseodymium; () => { var y = this; }; return x; } >maini : () => ruatanica.Praseodymium @@ -13610,9 +13610,9 @@ module caurinus { export class psilurus extends lutreolus.punicus { >psilurus : psilurus ->lutreolus.punicus : any +>lutreolus.punicus : typeof lutreolus.punicus >lutreolus : typeof lutreolus ->punicus : lutreolus.punicus +>punicus : typeof lutreolus.punicus socialis(): panglima.amphibius { var x: panglima.amphibius; () => { var y = this; }; return x; } >socialis : () => panglima.amphibius diff --git a/tests/baselines/reference/returnStatements.types b/tests/baselines/reference/returnStatements.types index e5332b2e6ac..07b20e8cabe 100644 --- a/tests/baselines/reference/returnStatements.types +++ b/tests/baselines/reference/returnStatements.types @@ -49,7 +49,7 @@ class C implements I { } class D extends C { >D : D ->C : C +>C : typeof C name: string; >name : string diff --git a/tests/baselines/reference/sourceMapValidationClassWithDefaultConstructorAndExtendsClause.types b/tests/baselines/reference/sourceMapValidationClassWithDefaultConstructorAndExtendsClause.types index 12d8d56cf6e..ef6e6a64663 100644 --- a/tests/baselines/reference/sourceMapValidationClassWithDefaultConstructorAndExtendsClause.types +++ b/tests/baselines/reference/sourceMapValidationClassWithDefaultConstructorAndExtendsClause.types @@ -5,7 +5,7 @@ class AbstractGreeter { class Greeter extends AbstractGreeter { >Greeter : Greeter ->AbstractGreeter : AbstractGreeter +>AbstractGreeter : typeof AbstractGreeter public a = 10; >a : number diff --git a/tests/baselines/reference/specializedInheritedConstructors1.types b/tests/baselines/reference/specializedInheritedConstructors1.types index a073efa24d7..6ca5b01776a 100644 --- a/tests/baselines/reference/specializedInheritedConstructors1.types +++ b/tests/baselines/reference/specializedInheritedConstructors1.types @@ -27,7 +27,7 @@ class Model { } class MyView extends View { } >MyView : MyView ->View : View +>View : typeof View >Model : Model var m: ViewOptions = { model: new Model() }; diff --git a/tests/baselines/reference/staticFactory1.types b/tests/baselines/reference/staticFactory1.types index 538728de2df..419fffd6b0d 100644 --- a/tests/baselines/reference/staticFactory1.types +++ b/tests/baselines/reference/staticFactory1.types @@ -17,7 +17,7 @@ class Base { class Derived extends Base { >Derived : Derived ->Base : Base +>Base : typeof Base foo() { return 2; } >foo : () => number diff --git a/tests/baselines/reference/staticInheritance.types b/tests/baselines/reference/staticInheritance.types index 04c64281ba8..0235735ca44 100644 --- a/tests/baselines/reference/staticInheritance.types +++ b/tests/baselines/reference/staticInheritance.types @@ -18,7 +18,7 @@ class A { } class B extends A { >B : B ->A : A +>A : typeof A p1 = doThing(A); // OK >p1 : void diff --git a/tests/baselines/reference/staticMemberAccessOffDerivedType1.types b/tests/baselines/reference/staticMemberAccessOffDerivedType1.types index 55b9c83969b..835100d3e9b 100644 --- a/tests/baselines/reference/staticMemberAccessOffDerivedType1.types +++ b/tests/baselines/reference/staticMemberAccessOffDerivedType1.types @@ -11,7 +11,7 @@ class SomeBase { } class P extends SomeBase { >P : P ->SomeBase : SomeBase +>SomeBase : typeof SomeBase static SomeNumber = P.GetNumber(); >SomeNumber : number diff --git a/tests/baselines/reference/subtypingTransitivity.types b/tests/baselines/reference/subtypingTransitivity.types index 0a41e045d98..543284bf619 100644 --- a/tests/baselines/reference/subtypingTransitivity.types +++ b/tests/baselines/reference/subtypingTransitivity.types @@ -9,14 +9,14 @@ class B { class D extends B { >D : D ->B : B +>B : typeof B public x: string; >x : string } class D2 extends B { >D2 : D2 ->B : B +>B : typeof B public x: number; >x : number diff --git a/tests/baselines/reference/subtypingWithCallSignatures2.types b/tests/baselines/reference/subtypingWithCallSignatures2.types index 8a56e05a9c2..1e7e412c870 100644 --- a/tests/baselines/reference/subtypingWithCallSignatures2.types +++ b/tests/baselines/reference/subtypingWithCallSignatures2.types @@ -7,17 +7,17 @@ class Base { foo: string; } class Derived extends Base { bar: string; } >Derived : Derived ->Base : Base +>Base : typeof Base >bar : string class Derived2 extends Derived { baz: string; } >Derived2 : Derived2 ->Derived : Derived +>Derived : typeof Derived >baz : string class OtherDerived extends Base { bing: string; } >OtherDerived : OtherDerived ->Base : Base +>Base : typeof Base >bing : string declare function foo1(a: (x: number) => number[]): typeof a; diff --git a/tests/baselines/reference/subtypingWithCallSignatures3.types b/tests/baselines/reference/subtypingWithCallSignatures3.types index 379810b2541..b925f7d923e 100644 --- a/tests/baselines/reference/subtypingWithCallSignatures3.types +++ b/tests/baselines/reference/subtypingWithCallSignatures3.types @@ -11,17 +11,17 @@ module Errors { class Derived extends Base { bar: string; } >Derived : Derived ->Base : Base +>Base : typeof Base >bar : string class Derived2 extends Derived { baz: string; } >Derived2 : Derived2 ->Derived : Derived +>Derived : typeof Derived >baz : string class OtherDerived extends Base { bing: string; } >OtherDerived : OtherDerived ->Base : Base +>Base : typeof Base >bing : string declare function foo2(a2: (x: number) => string[]): typeof a2; diff --git a/tests/baselines/reference/subtypingWithCallSignatures4.types b/tests/baselines/reference/subtypingWithCallSignatures4.types index e76d36114e9..caa06f6a8e6 100644 --- a/tests/baselines/reference/subtypingWithCallSignatures4.types +++ b/tests/baselines/reference/subtypingWithCallSignatures4.types @@ -7,17 +7,17 @@ class Base { foo: string; } class Derived extends Base { bar: string; } >Derived : Derived ->Base : Base +>Base : typeof Base >bar : string class Derived2 extends Derived { baz: string; } >Derived2 : Derived2 ->Derived : Derived +>Derived : typeof Derived >baz : string class OtherDerived extends Base { bing: string; } >OtherDerived : OtherDerived ->Base : Base +>Base : typeof Base >bing : string declare function foo1(a: (x: T) => T[]); diff --git a/tests/baselines/reference/subtypingWithConstructSignatures2.types b/tests/baselines/reference/subtypingWithConstructSignatures2.types index d723a367ecb..a7a547dad60 100644 --- a/tests/baselines/reference/subtypingWithConstructSignatures2.types +++ b/tests/baselines/reference/subtypingWithConstructSignatures2.types @@ -7,17 +7,17 @@ class Base { foo: string; } class Derived extends Base { bar: string; } >Derived : Derived ->Base : Base +>Base : typeof Base >bar : string class Derived2 extends Derived { baz: string; } >Derived2 : Derived2 ->Derived : Derived +>Derived : typeof Derived >baz : string class OtherDerived extends Base { bing: string; } >OtherDerived : OtherDerived ->Base : Base +>Base : typeof Base >bing : string declare function foo1(a: new (x: number) => number[]): typeof a; diff --git a/tests/baselines/reference/subtypingWithConstructSignatures3.types b/tests/baselines/reference/subtypingWithConstructSignatures3.types index b0f0680c7a0..a46b8c02e15 100644 --- a/tests/baselines/reference/subtypingWithConstructSignatures3.types +++ b/tests/baselines/reference/subtypingWithConstructSignatures3.types @@ -11,17 +11,17 @@ module Errors { class Derived extends Base { bar: string; } >Derived : Derived ->Base : Base +>Base : typeof Base >bar : string class Derived2 extends Derived { baz: string; } >Derived2 : Derived2 ->Derived : Derived +>Derived : typeof Derived >baz : string class OtherDerived extends Base { bing: string; } >OtherDerived : OtherDerived ->Base : Base +>Base : typeof Base >bing : string declare function foo2(a2: new (x: number) => string[]): typeof a2; diff --git a/tests/baselines/reference/subtypingWithConstructSignatures4.types b/tests/baselines/reference/subtypingWithConstructSignatures4.types index 21a40ecf7fc..d4251e7cd4b 100644 --- a/tests/baselines/reference/subtypingWithConstructSignatures4.types +++ b/tests/baselines/reference/subtypingWithConstructSignatures4.types @@ -7,17 +7,17 @@ class Base { foo: string; } class Derived extends Base { bar: string; } >Derived : Derived ->Base : Base +>Base : typeof Base >bar : string class Derived2 extends Derived { baz: string; } >Derived2 : Derived2 ->Derived : Derived +>Derived : typeof Derived >baz : string class OtherDerived extends Base { bing: string; } >OtherDerived : OtherDerived ->Base : Base +>Base : typeof Base >bing : string declare function foo1(a: new (x: T) => T[]); diff --git a/tests/baselines/reference/subtypingWithConstructSignatures5.types b/tests/baselines/reference/subtypingWithConstructSignatures5.types index 7ffb4db5467..c2d49f8e661 100644 --- a/tests/baselines/reference/subtypingWithConstructSignatures5.types +++ b/tests/baselines/reference/subtypingWithConstructSignatures5.types @@ -8,17 +8,17 @@ class Base { foo: string; } class Derived extends Base { bar: string; } >Derived : Derived ->Base : Base +>Base : typeof Base >bar : string class Derived2 extends Derived { baz: string; } >Derived2 : Derived2 ->Derived : Derived +>Derived : typeof Derived >baz : string class OtherDerived extends Base { bing: string; } >OtherDerived : OtherDerived ->Base : Base +>Base : typeof Base >bing : string interface A { // T diff --git a/tests/baselines/reference/subtypingWithConstructSignatures6.types b/tests/baselines/reference/subtypingWithConstructSignatures6.types index bcbf452615b..b94befab2f3 100644 --- a/tests/baselines/reference/subtypingWithConstructSignatures6.types +++ b/tests/baselines/reference/subtypingWithConstructSignatures6.types @@ -9,17 +9,17 @@ class Base { foo: string; } class Derived extends Base { bar: string; } >Derived : Derived ->Base : Base +>Base : typeof Base >bar : string class Derived2 extends Derived { baz: string; } >Derived2 : Derived2 ->Derived : Derived +>Derived : typeof Derived >baz : string class OtherDerived extends Base { bing: string; } >OtherDerived : OtherDerived ->Base : Base +>Base : typeof Base >bing : string interface A { // T diff --git a/tests/baselines/reference/subtypingWithObjectMembers4.types b/tests/baselines/reference/subtypingWithObjectMembers4.types index 6e6475b2578..2009632b74c 100644 --- a/tests/baselines/reference/subtypingWithObjectMembers4.types +++ b/tests/baselines/reference/subtypingWithObjectMembers4.types @@ -10,7 +10,7 @@ class Base { class Derived extends Base { >Derived : Derived ->Base : Base +>Base : typeof Base bar: string; >bar : string @@ -26,7 +26,7 @@ class A { class B extends A { >B : B ->A : A +>A : typeof A fooo: Derived; // ok, inherits foo >fooo : Derived @@ -42,7 +42,7 @@ class A2 { class B2 extends A2 { >B2 : B2 ->A2 : A2 +>A2 : typeof A2 1.1: Derived; // ok, inherits 1 >Derived : Derived @@ -57,7 +57,7 @@ class A3 { class B3 extends A3 { >B3 : B3 ->A3 : A3 +>A3 : typeof A3 '1.1': Derived; // ok, inherits '1' >Derived : Derived diff --git a/tests/baselines/reference/super2.types b/tests/baselines/reference/super2.types index a3807f03099..c09ff3e8be5 100644 --- a/tests/baselines/reference/super2.types +++ b/tests/baselines/reference/super2.types @@ -20,7 +20,7 @@ class Base5 { class Sub5 extends Base5 { >Sub5 : Sub5 ->Base5 : Base5 +>Base5 : typeof Base5 public x() { >x : () => string @@ -32,7 +32,7 @@ class Sub5 extends Base5 { class SubSub5 extends Sub5 { >SubSub5 : SubSub5 ->Sub5 : Sub5 +>Sub5 : typeof Sub5 public x() { >x : () => string @@ -68,7 +68,7 @@ class Base6 { class Sub6 extends Base6 { >Sub6 : Sub6 ->Base6 : Base6 +>Base6 : typeof Base6 public y() { >y : () => string @@ -80,7 +80,7 @@ class Sub6 extends Base6 { class SubSub6 extends Sub6 { >SubSub6 : SubSub6 ->Sub6 : Sub6 +>Sub6 : typeof Sub6 public y() { >y : () => string diff --git a/tests/baselines/reference/superAccessInFatArrow1.types b/tests/baselines/reference/superAccessInFatArrow1.types index 0c50015c051..279a94b29e0 100644 --- a/tests/baselines/reference/superAccessInFatArrow1.types +++ b/tests/baselines/reference/superAccessInFatArrow1.types @@ -11,7 +11,7 @@ module test { } export class B extends A { >B : B ->A : A +>A : typeof A bar(callback: () => void ) { >bar : (callback: () => void) => void diff --git a/tests/baselines/reference/superCallFromClassThatDerivesFromGenericType1.types b/tests/baselines/reference/superCallFromClassThatDerivesFromGenericType1.types index 7630d67606a..c0a66ff629a 100644 --- a/tests/baselines/reference/superCallFromClassThatDerivesFromGenericType1.types +++ b/tests/baselines/reference/superCallFromClassThatDerivesFromGenericType1.types @@ -16,7 +16,7 @@ declare class B { class D extends B { >D : D ->B : B +>B : typeof B constructor() { super(); diff --git a/tests/baselines/reference/superCallFromClassThatDerivesFromGenericType2.types b/tests/baselines/reference/superCallFromClassThatDerivesFromGenericType2.types index cd26719d22e..873766b6af2 100644 --- a/tests/baselines/reference/superCallFromClassThatDerivesFromGenericType2.types +++ b/tests/baselines/reference/superCallFromClassThatDerivesFromGenericType2.types @@ -12,7 +12,7 @@ declare class B { class D extends B { >D : D ->B : B +>B : typeof B constructor() { super(); diff --git a/tests/baselines/reference/superCallParameterContextualTyping1.types b/tests/baselines/reference/superCallParameterContextualTyping1.types index 23aa3147997..31c6db02b80 100644 --- a/tests/baselines/reference/superCallParameterContextualTyping1.types +++ b/tests/baselines/reference/superCallParameterContextualTyping1.types @@ -16,7 +16,7 @@ class A { class B extends A { >B : B ->A : A +>A : typeof A // Ensure 'value' is of type 'number (and not '{}') by using its 'toExponential()' method. constructor() { super(value => String(value.toExponential())); } diff --git a/tests/baselines/reference/superCallParameterContextualTyping3.types b/tests/baselines/reference/superCallParameterContextualTyping3.types index 4a8515d110c..a640fbfdeb1 100644 --- a/tests/baselines/reference/superCallParameterContextualTyping3.types +++ b/tests/baselines/reference/superCallParameterContextualTyping3.types @@ -29,7 +29,7 @@ class CBase { class C extends CBase { >C : C ->CBase : CBase +>CBase : typeof CBase constructor() { // Should be okay. diff --git a/tests/baselines/reference/superCalls.types b/tests/baselines/reference/superCalls.types index ce5353df329..21f0d5dc7ee 100644 --- a/tests/baselines/reference/superCalls.types +++ b/tests/baselines/reference/superCalls.types @@ -17,7 +17,7 @@ function v(): void { } class Derived extends Base { >Derived : Derived ->Base : Base +>Base : typeof Base //super call in class constructor of derived type constructor(public q: number) { @@ -49,7 +49,7 @@ class OtherBase { class OtherDerived extends OtherBase { >OtherDerived : OtherDerived ->OtherBase : OtherBase +>OtherBase : typeof OtherBase constructor() { var p = ''; diff --git a/tests/baselines/reference/superInCatchBlock1.types b/tests/baselines/reference/superInCatchBlock1.types index 616c11cee7f..33f5e974f61 100644 --- a/tests/baselines/reference/superInCatchBlock1.types +++ b/tests/baselines/reference/superInCatchBlock1.types @@ -7,7 +7,7 @@ class A { } class B extends A { >B : B ->A : A +>A : typeof A m() { >m : () => void diff --git a/tests/baselines/reference/superWithGenericSpecialization.types b/tests/baselines/reference/superWithGenericSpecialization.types index 258615b309f..d9e4cbf820c 100644 --- a/tests/baselines/reference/superWithGenericSpecialization.types +++ b/tests/baselines/reference/superWithGenericSpecialization.types @@ -11,7 +11,7 @@ class C { class D extends C { >D : D >T : T ->C : C +>C : typeof C y: T; >y : T diff --git a/tests/baselines/reference/superWithGenerics.types b/tests/baselines/reference/superWithGenerics.types index 3a034b67f04..bdcaab7ba75 100644 --- a/tests/baselines/reference/superWithGenerics.types +++ b/tests/baselines/reference/superWithGenerics.types @@ -16,7 +16,7 @@ declare class B { class D extends B { >D : D ->B : B +>B : typeof B constructor() { super(); diff --git a/tests/baselines/reference/switchStatements.types b/tests/baselines/reference/switchStatements.types index a5679547c12..2d8901c0cd0 100644 --- a/tests/baselines/reference/switchStatements.types +++ b/tests/baselines/reference/switchStatements.types @@ -99,7 +99,7 @@ class C { id: number; } class D extends C { name: string } >D : D ->C : C +>C : typeof C >name : string switch (new C()) { diff --git a/tests/baselines/reference/symbolProperty26.types b/tests/baselines/reference/symbolProperty26.types index 386761c98f9..3f482551bcc 100644 --- a/tests/baselines/reference/symbolProperty26.types +++ b/tests/baselines/reference/symbolProperty26.types @@ -14,7 +14,7 @@ class C1 { class C2 extends C1 { >C2 : C2 ->C1 : C1 +>C1 : typeof C1 [Symbol.toStringTag]() { >Symbol.toStringTag : symbol diff --git a/tests/baselines/reference/symbolProperty27.types b/tests/baselines/reference/symbolProperty27.types index d8ff2f2f116..d65989a903d 100644 --- a/tests/baselines/reference/symbolProperty27.types +++ b/tests/baselines/reference/symbolProperty27.types @@ -14,7 +14,7 @@ class C1 { class C2 extends C1 { >C2 : C2 ->C1 : C1 +>C1 : typeof C1 [Symbol.toStringTag]() { >Symbol.toStringTag : symbol diff --git a/tests/baselines/reference/symbolProperty28.types b/tests/baselines/reference/symbolProperty28.types index 6eddebf44d8..14a1f64f409 100644 --- a/tests/baselines/reference/symbolProperty28.types +++ b/tests/baselines/reference/symbolProperty28.types @@ -16,7 +16,7 @@ class C1 { class C2 extends C1 { } >C2 : C2 ->C1 : C1 +>C1 : typeof C1 var c: C2; >c : C2 diff --git a/tests/baselines/reference/typeGuardFunction.types b/tests/baselines/reference/typeGuardFunction.types index cf673f965f9..8addafa2bc6 100644 --- a/tests/baselines/reference/typeGuardFunction.types +++ b/tests/baselines/reference/typeGuardFunction.types @@ -16,7 +16,7 @@ class B { class C extends A { >C : C ->A : A +>A : typeof A propC: number; >propC : number diff --git a/tests/baselines/reference/typeGuardFunctionGenerics.types b/tests/baselines/reference/typeGuardFunctionGenerics.types index 77162e55a40..6e0ea52aea6 100644 --- a/tests/baselines/reference/typeGuardFunctionGenerics.types +++ b/tests/baselines/reference/typeGuardFunctionGenerics.types @@ -16,7 +16,7 @@ class B { class C extends A { >C : C ->A : A +>A : typeof A propC: number; >propC : number diff --git a/tests/baselines/reference/typeGuardOfFormInstanceOf.types b/tests/baselines/reference/typeGuardOfFormInstanceOf.types index 891e8c1bea2..060c0caa37f 100644 --- a/tests/baselines/reference/typeGuardOfFormInstanceOf.types +++ b/tests/baselines/reference/typeGuardOfFormInstanceOf.types @@ -19,7 +19,7 @@ class C2 { } class D1 extends C1 { >D1 : D1 ->C1 : C1 +>C1 : typeof C1 p3: number; >p3 : number diff --git a/tests/baselines/reference/typeGuardOfFormIsType.types b/tests/baselines/reference/typeGuardOfFormIsType.types index b14e5e22910..fc62b84a79a 100644 --- a/tests/baselines/reference/typeGuardOfFormIsType.types +++ b/tests/baselines/reference/typeGuardOfFormIsType.types @@ -14,7 +14,7 @@ class C2 { } class D1 extends C1 { >D1 : D1 ->C1 : C1 +>C1 : typeof C1 p3: number; >p3 : number diff --git a/tests/baselines/reference/typeOfSuperCall.types b/tests/baselines/reference/typeOfSuperCall.types index 92108bedc15..fc355df5413 100644 --- a/tests/baselines/reference/typeOfSuperCall.types +++ b/tests/baselines/reference/typeOfSuperCall.types @@ -5,7 +5,7 @@ class C { class D extends C { >D : D ->C : C +>C : typeof C constructor() { var x: void = super(); diff --git a/tests/baselines/reference/typeParameterExtendingUnion1.types b/tests/baselines/reference/typeParameterExtendingUnion1.types index 29b748bab7d..f907d65e0c3 100644 --- a/tests/baselines/reference/typeParameterExtendingUnion1.types +++ b/tests/baselines/reference/typeParameterExtendingUnion1.types @@ -5,12 +5,12 @@ class Animal { run() { } } class Cat extends Animal { meow } >Cat : Cat ->Animal : Animal +>Animal : typeof Animal >meow : any class Dog extends Animal { woof } >Dog : Dog ->Animal : Animal +>Animal : typeof Animal >woof : any function run(a: Animal) { diff --git a/tests/baselines/reference/typeParameterExtendingUnion2.types b/tests/baselines/reference/typeParameterExtendingUnion2.types index 0bb1e6a58af..cc7eb67fd46 100644 --- a/tests/baselines/reference/typeParameterExtendingUnion2.types +++ b/tests/baselines/reference/typeParameterExtendingUnion2.types @@ -5,12 +5,12 @@ class Animal { run() { } } class Cat extends Animal { meow } >Cat : Cat ->Animal : Animal +>Animal : typeof Animal >meow : any class Dog extends Animal { woof } >Dog : Dog ->Animal : Animal +>Animal : typeof Animal >woof : any function run(a: Cat | Dog) { diff --git a/tests/baselines/reference/typeofClass2.types b/tests/baselines/reference/typeofClass2.types index 8870d9a5874..663316b30e9 100644 --- a/tests/baselines/reference/typeofClass2.types +++ b/tests/baselines/reference/typeofClass2.types @@ -31,7 +31,7 @@ class C { class D extends C { >D : D ->C : C +>C : typeof C static baz(x: number) { } >baz : (x: number) => void diff --git a/tests/baselines/reference/typesWithSpecializedCallSignatures.types b/tests/baselines/reference/typesWithSpecializedCallSignatures.types index fa3ac7a4ba4..37d00550ed5 100644 --- a/tests/baselines/reference/typesWithSpecializedCallSignatures.types +++ b/tests/baselines/reference/typesWithSpecializedCallSignatures.types @@ -7,12 +7,12 @@ class Base { foo: string } class Derived1 extends Base { bar: string } >Derived1 : Derived1 ->Base : Base +>Base : typeof Base >bar : string class Derived2 extends Base { baz: string } >Derived2 : Derived2 ->Base : Base +>Base : typeof Base >baz : string class C { diff --git a/tests/baselines/reference/typesWithSpecializedConstructSignatures.types b/tests/baselines/reference/typesWithSpecializedConstructSignatures.types index 66e274d917a..8f1f6a09b7f 100644 --- a/tests/baselines/reference/typesWithSpecializedConstructSignatures.types +++ b/tests/baselines/reference/typesWithSpecializedConstructSignatures.types @@ -7,12 +7,12 @@ class Base { foo: string } class Derived1 extends Base { bar: string } >Derived1 : Derived1 ->Base : Base +>Base : typeof Base >bar : string class Derived2 extends Base { baz: string } >Derived2 : Derived2 ->Base : Base +>Base : typeof Base >baz : string class C { diff --git a/tests/baselines/reference/undefinedIsSubtypeOfEverything.types b/tests/baselines/reference/undefinedIsSubtypeOfEverything.types index d89f032bf29..d80f95c3b5e 100644 --- a/tests/baselines/reference/undefinedIsSubtypeOfEverything.types +++ b/tests/baselines/reference/undefinedIsSubtypeOfEverything.types @@ -11,7 +11,7 @@ class Base { class D0 extends Base { >D0 : D0 ->Base : Base +>Base : typeof Base foo: any; >foo : any @@ -19,7 +19,7 @@ class D0 extends Base { class DA extends Base { >DA : DA ->Base : Base +>Base : typeof Base foo: typeof undefined; >foo : any @@ -28,7 +28,7 @@ class DA extends Base { class D1 extends Base { >D1 : D1 ->Base : Base +>Base : typeof Base foo: string; >foo : string @@ -36,7 +36,7 @@ class D1 extends Base { class D1A extends Base { >D1A : D1A ->Base : Base +>Base : typeof Base foo: String; >foo : String @@ -46,7 +46,7 @@ class D1A extends Base { class D2 extends Base { >D2 : D2 ->Base : Base +>Base : typeof Base foo: number; >foo : number @@ -54,7 +54,7 @@ class D2 extends Base { class D2A extends Base { >D2A : D2A ->Base : Base +>Base : typeof Base foo: Number; >foo : Number @@ -64,7 +64,7 @@ class D2A extends Base { class D3 extends Base { >D3 : D3 ->Base : Base +>Base : typeof Base foo: boolean; >foo : boolean @@ -72,7 +72,7 @@ class D3 extends Base { class D3A extends Base { >D3A : D3A ->Base : Base +>Base : typeof Base foo: Boolean; >foo : Boolean @@ -82,7 +82,7 @@ class D3A extends Base { class D4 extends Base { >D4 : D4 ->Base : Base +>Base : typeof Base foo: RegExp; >foo : RegExp @@ -91,7 +91,7 @@ class D4 extends Base { class D5 extends Base { >D5 : D5 ->Base : Base +>Base : typeof Base foo: Date; >foo : Date @@ -101,7 +101,7 @@ class D5 extends Base { class D6 extends Base { >D6 : D6 ->Base : Base +>Base : typeof Base foo: number[]; >foo : number[] @@ -109,7 +109,7 @@ class D6 extends Base { class D7 extends Base { >D7 : D7 ->Base : Base +>Base : typeof Base foo: { bar: number }; >foo : { bar: number; } @@ -119,7 +119,7 @@ class D7 extends Base { class D8 extends Base { >D8 : D8 ->Base : Base +>Base : typeof Base foo: D7; >foo : D7 @@ -134,7 +134,7 @@ interface I1 { } class D9 extends Base { >D9 : D9 ->Base : Base +>Base : typeof Base foo: I1; >foo : I1 @@ -144,7 +144,7 @@ class D9 extends Base { class D10 extends Base { >D10 : D10 ->Base : Base +>Base : typeof Base foo: () => number; >foo : () => number @@ -156,7 +156,7 @@ enum E { A } class D11 extends Base { >D11 : D11 ->Base : Base +>Base : typeof Base foo: E; >foo : E @@ -175,7 +175,7 @@ module f { } class D12 extends Base { >D12 : D12 ->Base : Base +>Base : typeof Base foo: typeof f; >foo : typeof f @@ -196,7 +196,7 @@ module c { } class D13 extends Base { >D13 : D13 ->Base : Base +>Base : typeof Base foo: typeof c; >foo : typeof c @@ -207,7 +207,7 @@ class D13 extends Base { class D14 extends Base { >D14 : D14 >T : T ->Base : Base +>Base : typeof Base foo: T; >foo : T @@ -219,7 +219,7 @@ class D15 extends Base { >D15 : D15 >T : T >U : U ->Base : Base +>Base : typeof Base foo: U; >foo : U @@ -233,7 +233,7 @@ class D15 extends Base { class D16 extends Base { >D16 : D16 ->Base : Base +>Base : typeof Base foo: Object; >foo : Object @@ -243,7 +243,7 @@ class D16 extends Base { class D17 extends Base { >D17 : D17 ->Base : Base +>Base : typeof Base foo: {}; >foo : {} diff --git a/tests/baselines/reference/underscoreMapFirst.types b/tests/baselines/reference/underscoreMapFirst.types index 4de320604bd..c22d127ab34 100644 --- a/tests/baselines/reference/underscoreMapFirst.types +++ b/tests/baselines/reference/underscoreMapFirst.types @@ -112,7 +112,7 @@ interface ISeries { class MyView extends View { >MyView : MyView ->View : View +>View : typeof View public getDataSeries(): ISeries[] { >getDataSeries : () => ISeries[] diff --git a/tests/baselines/reference/unionTypeFromArrayLiteral.types b/tests/baselines/reference/unionTypeFromArrayLiteral.types index 63aefdd214c..83fc69560f5 100644 --- a/tests/baselines/reference/unionTypeFromArrayLiteral.types +++ b/tests/baselines/reference/unionTypeFromArrayLiteral.types @@ -58,12 +58,12 @@ class D { foo2() { } } class E extends C { foo3() { } } >E : E ->C : C +>C : typeof C >foo3 : () => void class F extends C { foo4() { } } >F : F ->C : C +>C : typeof C >foo4 : () => void var c: C, d: D, e: E, f: F; diff --git a/tests/baselines/reference/validUseOfThisInSuper.types b/tests/baselines/reference/validUseOfThisInSuper.types index d7c882496e2..75a2d8df9dc 100644 --- a/tests/baselines/reference/validUseOfThisInSuper.types +++ b/tests/baselines/reference/validUseOfThisInSuper.types @@ -9,7 +9,7 @@ class Base { } class Super extends Base { >Super : Super ->Base : Base +>Base : typeof Base constructor() { super((() => this)()); // ok since this is not the case: The constructor declares parameter properties or the containing class declares instance member variables with initializers. diff --git a/tests/baselines/reference/varArgsOnConstructorTypes.types b/tests/baselines/reference/varArgsOnConstructorTypes.types index 5ac9babd426..c595476a039 100644 --- a/tests/baselines/reference/varArgsOnConstructorTypes.types +++ b/tests/baselines/reference/varArgsOnConstructorTypes.types @@ -8,7 +8,7 @@ export class A { export class B extends A { >B : B ->A : A +>A : typeof A private p1: number; >p1 : number From d5752592ac32e42332cd69bec6680b34d4f46b14 Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Mon, 15 Jun 2015 16:14:01 -0700 Subject: [PATCH 06/17] Adding basic tests --- .../classExtendingBuiltinType.ts | 10 ++++ .../classExtendingClassLikeType.ts | 57 +++++++++++++++++++ .../classExtendingNonConstructor.ts | 13 +++++ .../classDeclarations/classExtendingNull.ts | 2 + 4 files changed, 82 insertions(+) create mode 100644 tests/cases/conformance/classes/classDeclarations/classExtendingBuiltinType.ts create mode 100644 tests/cases/conformance/classes/classDeclarations/classExtendingClassLikeType.ts create mode 100644 tests/cases/conformance/classes/classDeclarations/classExtendingNonConstructor.ts create mode 100644 tests/cases/conformance/classes/classDeclarations/classExtendingNull.ts diff --git a/tests/cases/conformance/classes/classDeclarations/classExtendingBuiltinType.ts b/tests/cases/conformance/classes/classDeclarations/classExtendingBuiltinType.ts new file mode 100644 index 00000000000..f36da74ea71 --- /dev/null +++ b/tests/cases/conformance/classes/classDeclarations/classExtendingBuiltinType.ts @@ -0,0 +1,10 @@ +class C1 extends Object { } +class C2 extends Function { } +class C3 extends String { } +class C4 extends Boolean { } +class C5 extends Number { } +class C6 extends Date { } +class C7 extends RegExp { } +class C8 extends Error { } +class C9 extends Array { } +class C10 extends Array { } diff --git a/tests/cases/conformance/classes/classDeclarations/classExtendingClassLikeType.ts b/tests/cases/conformance/classes/classDeclarations/classExtendingClassLikeType.ts new file mode 100644 index 00000000000..a9f2a3049ed --- /dev/null +++ b/tests/cases/conformance/classes/classDeclarations/classExtendingClassLikeType.ts @@ -0,0 +1,57 @@ +interface Base { + x: T; + y: U; +} + +// Error, no Base constructor function +class D0 extends Base { +} + +interface BaseConstructor { + new (x: string, y: string): Base; + new (x: T): Base; + new (x: T, y: T): Base; + new (x: T, y: U): Base; +} + +declare function getBase(): BaseConstructor; + +class D1 extends getBase() { + constructor() { + super("abc", "def"); + this.x = "x"; + this.y = "y"; + } +} + +class D2 extends getBase() { + constructor() { + super(10); + super(10, 20); + this.x = 1; + this.y = 2; + } +} + +class D3 extends getBase() { + constructor() { + super("abc", 42); + this.x = "x"; + this.y = 2; + } +} + +// Error, no constructors with three type arguments +class D4 extends getBase() { +} + +interface BadBaseConstructor { + new (x: string): Base; + new (x: number): Base; +} + +declare function getBadBase(): BadBaseConstructor; + +// Error, constructor return types differ +class D5 extends getBadBase() { +} diff --git a/tests/cases/conformance/classes/classDeclarations/classExtendingNonConstructor.ts b/tests/cases/conformance/classes/classDeclarations/classExtendingNonConstructor.ts new file mode 100644 index 00000000000..4b7e5c7a76e --- /dev/null +++ b/tests/cases/conformance/classes/classDeclarations/classExtendingNonConstructor.ts @@ -0,0 +1,13 @@ +var x: {}; + +function foo() { + this.x = 1; +} + +class C1 extends undefined { } +class C2 extends true { } +class C3 extends false { } +class C4 extends 42 { } +class C5 extends "hello" { } +class C6 extends x { } +class C7 extends foo { } diff --git a/tests/cases/conformance/classes/classDeclarations/classExtendingNull.ts b/tests/cases/conformance/classes/classDeclarations/classExtendingNull.ts new file mode 100644 index 00000000000..655cf44ed57 --- /dev/null +++ b/tests/cases/conformance/classes/classDeclarations/classExtendingNull.ts @@ -0,0 +1,2 @@ +class C1 extends null { } +class C2 extends (null) { } From 186f52572b08ed2ec98945bc16b06ef5a6158a53 Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Mon, 15 Jun 2015 16:14:28 -0700 Subject: [PATCH 07/17] Accepting new baselines --- .../reference/classExtendingBuiltinType.js | 90 +++++++++++++ .../classExtendingBuiltinType.symbols | 41 ++++++ .../reference/classExtendingBuiltinType.types | 41 ++++++ .../classExtendingClassLikeType.errors.txt | 70 +++++++++++ .../reference/classExtendingClassLikeType.js | 119 ++++++++++++++++++ .../classExtendingNonConstructor.errors.txt | 38 ++++++ .../reference/classExtendingNonConstructor.js | 76 +++++++++++ .../baselines/reference/classExtendingNull.js | 26 ++++ .../reference/classExtendingNull.symbols | 7 ++ .../reference/classExtendingNull.types | 10 ++ 10 files changed, 518 insertions(+) create mode 100644 tests/baselines/reference/classExtendingBuiltinType.js create mode 100644 tests/baselines/reference/classExtendingBuiltinType.symbols create mode 100644 tests/baselines/reference/classExtendingBuiltinType.types create mode 100644 tests/baselines/reference/classExtendingClassLikeType.errors.txt create mode 100644 tests/baselines/reference/classExtendingClassLikeType.js create mode 100644 tests/baselines/reference/classExtendingNonConstructor.errors.txt create mode 100644 tests/baselines/reference/classExtendingNonConstructor.js create mode 100644 tests/baselines/reference/classExtendingNull.js create mode 100644 tests/baselines/reference/classExtendingNull.symbols create mode 100644 tests/baselines/reference/classExtendingNull.types diff --git a/tests/baselines/reference/classExtendingBuiltinType.js b/tests/baselines/reference/classExtendingBuiltinType.js new file mode 100644 index 00000000000..666ada39505 --- /dev/null +++ b/tests/baselines/reference/classExtendingBuiltinType.js @@ -0,0 +1,90 @@ +//// [classExtendingBuiltinType.ts] +class C1 extends Object { } +class C2 extends Function { } +class C3 extends String { } +class C4 extends Boolean { } +class C5 extends Number { } +class C6 extends Date { } +class C7 extends RegExp { } +class C8 extends Error { } +class C9 extends Array { } +class C10 extends Array { } + + +//// [classExtendingBuiltinType.js] +var __extends = (this && this.__extends) || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var C1 = (function (_super) { + __extends(C1, _super); + function C1() { + _super.apply(this, arguments); + } + return C1; +})(Object); +var C2 = (function (_super) { + __extends(C2, _super); + function C2() { + _super.apply(this, arguments); + } + return C2; +})(Function); +var C3 = (function (_super) { + __extends(C3, _super); + function C3() { + _super.apply(this, arguments); + } + return C3; +})(String); +var C4 = (function (_super) { + __extends(C4, _super); + function C4() { + _super.apply(this, arguments); + } + return C4; +})(Boolean); +var C5 = (function (_super) { + __extends(C5, _super); + function C5() { + _super.apply(this, arguments); + } + return C5; +})(Number); +var C6 = (function (_super) { + __extends(C6, _super); + function C6() { + _super.apply(this, arguments); + } + return C6; +})(Date); +var C7 = (function (_super) { + __extends(C7, _super); + function C7() { + _super.apply(this, arguments); + } + return C7; +})(RegExp); +var C8 = (function (_super) { + __extends(C8, _super); + function C8() { + _super.apply(this, arguments); + } + return C8; +})(Error); +var C9 = (function (_super) { + __extends(C9, _super); + function C9() { + _super.apply(this, arguments); + } + return C9; +})(Array); +var C10 = (function (_super) { + __extends(C10, _super); + function C10() { + _super.apply(this, arguments); + } + return C10; +})(Array); diff --git a/tests/baselines/reference/classExtendingBuiltinType.symbols b/tests/baselines/reference/classExtendingBuiltinType.symbols new file mode 100644 index 00000000000..08e85be570e --- /dev/null +++ b/tests/baselines/reference/classExtendingBuiltinType.symbols @@ -0,0 +1,41 @@ +=== tests/cases/conformance/classes/classDeclarations/classExtendingBuiltinType.ts === +class C1 extends Object { } +>C1 : Symbol(C1, Decl(classExtendingBuiltinType.ts, 0, 0)) +>Object : Symbol(Object, Decl(lib.d.ts, 92, 1), Decl(lib.d.ts, 223, 11)) + +class C2 extends Function { } +>C2 : Symbol(C2, Decl(classExtendingBuiltinType.ts, 0, 27)) +>Function : Symbol(Function, Decl(lib.d.ts, 223, 38), Decl(lib.d.ts, 269, 11)) + +class C3 extends String { } +>C3 : Symbol(C3, Decl(classExtendingBuiltinType.ts, 1, 29)) +>String : Symbol(String, Decl(lib.d.ts, 275, 1), Decl(lib.d.ts, 443, 11)) + +class C4 extends Boolean { } +>C4 : Symbol(C4, Decl(classExtendingBuiltinType.ts, 2, 27)) +>Boolean : Symbol(Boolean, Decl(lib.d.ts, 443, 38), Decl(lib.d.ts, 456, 11)) + +class C5 extends Number { } +>C5 : Symbol(C5, Decl(classExtendingBuiltinType.ts, 3, 28)) +>Number : Symbol(Number, Decl(lib.d.ts, 456, 40), Decl(lib.d.ts, 518, 11)) + +class C6 extends Date { } +>C6 : Symbol(C6, Decl(classExtendingBuiltinType.ts, 4, 27)) +>Date : Symbol(Date, Decl(lib.d.ts, 633, 23), Decl(lib.d.ts, 815, 11)) + +class C7 extends RegExp { } +>C7 : Symbol(C7, Decl(classExtendingBuiltinType.ts, 5, 25)) +>RegExp : Symbol(RegExp, Decl(lib.d.ts, 825, 1), Decl(lib.d.ts, 876, 11)) + +class C8 extends Error { } +>C8 : Symbol(C8, Decl(classExtendingBuiltinType.ts, 6, 27)) +>Error : Symbol(Error, Decl(lib.d.ts, 876, 38), Decl(lib.d.ts, 889, 11)) + +class C9 extends Array { } +>C9 : Symbol(C9, Decl(classExtendingBuiltinType.ts, 7, 26)) +>Array : Symbol(Array, Decl(lib.d.ts, 1000, 23), Decl(lib.d.ts, 1171, 11)) + +class C10 extends Array { } +>C10 : Symbol(C10, Decl(classExtendingBuiltinType.ts, 8, 26)) +>Array : Symbol(Array, Decl(lib.d.ts, 1000, 23), Decl(lib.d.ts, 1171, 11)) + diff --git a/tests/baselines/reference/classExtendingBuiltinType.types b/tests/baselines/reference/classExtendingBuiltinType.types new file mode 100644 index 00000000000..ce774c0bff0 --- /dev/null +++ b/tests/baselines/reference/classExtendingBuiltinType.types @@ -0,0 +1,41 @@ +=== tests/cases/conformance/classes/classDeclarations/classExtendingBuiltinType.ts === +class C1 extends Object { } +>C1 : C1 +>Object : ObjectConstructor + +class C2 extends Function { } +>C2 : C2 +>Function : FunctionConstructor + +class C3 extends String { } +>C3 : C3 +>String : StringConstructor + +class C4 extends Boolean { } +>C4 : C4 +>Boolean : BooleanConstructor + +class C5 extends Number { } +>C5 : C5 +>Number : NumberConstructor + +class C6 extends Date { } +>C6 : C6 +>Date : DateConstructor + +class C7 extends RegExp { } +>C7 : C7 +>RegExp : RegExpConstructor + +class C8 extends Error { } +>C8 : C8 +>Error : ErrorConstructor + +class C9 extends Array { } +>C9 : C9 +>Array : ArrayConstructor + +class C10 extends Array { } +>C10 : C10 +>Array : ArrayConstructor + diff --git a/tests/baselines/reference/classExtendingClassLikeType.errors.txt b/tests/baselines/reference/classExtendingClassLikeType.errors.txt new file mode 100644 index 00000000000..6f9aef927ea --- /dev/null +++ b/tests/baselines/reference/classExtendingClassLikeType.errors.txt @@ -0,0 +1,70 @@ +tests/cases/conformance/classes/classDeclarations/classExtendingClassLikeType.ts(7,18): error TS2304: Cannot find name 'Base'. +tests/cases/conformance/classes/classDeclarations/classExtendingClassLikeType.ts(45,18): error TS2508: No base constructor has the specified number of type arguments. +tests/cases/conformance/classes/classDeclarations/classExtendingClassLikeType.ts(56,18): error TS2510: Base constructors must all have the same return type. + + +==== tests/cases/conformance/classes/classDeclarations/classExtendingClassLikeType.ts (3 errors) ==== + interface Base { + x: T; + y: U; + } + + // Error, no Base constructor function + class D0 extends Base { + ~~~~ +!!! error TS2304: Cannot find name 'Base'. + } + + interface BaseConstructor { + new (x: string, y: string): Base; + new (x: T): Base; + new (x: T, y: T): Base; + new (x: T, y: U): Base; + } + + declare function getBase(): BaseConstructor; + + class D1 extends getBase() { + constructor() { + super("abc", "def"); + this.x = "x"; + this.y = "y"; + } + } + + class D2 extends getBase() { + constructor() { + super(10); + super(10, 20); + this.x = 1; + this.y = 2; + } + } + + class D3 extends getBase() { + constructor() { + super("abc", 42); + this.x = "x"; + this.y = 2; + } + } + + // Error, no constructors with three type arguments + class D4 extends getBase() { + ~~~~~~~~~ +!!! error TS2508: No base constructor has the specified number of type arguments. + } + + interface BadBaseConstructor { + new (x: string): Base; + new (x: number): Base; + } + + declare function getBadBase(): BadBaseConstructor; + + // Error, constructor return types differ + class D5 extends getBadBase() { + ~~~~~~~~~~~~ +!!! error TS2510: Base constructors must all have the same return type. + } + \ No newline at end of file diff --git a/tests/baselines/reference/classExtendingClassLikeType.js b/tests/baselines/reference/classExtendingClassLikeType.js new file mode 100644 index 00000000000..88a5dc8dcd3 --- /dev/null +++ b/tests/baselines/reference/classExtendingClassLikeType.js @@ -0,0 +1,119 @@ +//// [classExtendingClassLikeType.ts] +interface Base { + x: T; + y: U; +} + +// Error, no Base constructor function +class D0 extends Base { +} + +interface BaseConstructor { + new (x: string, y: string): Base; + new (x: T): Base; + new (x: T, y: T): Base; + new (x: T, y: U): Base; +} + +declare function getBase(): BaseConstructor; + +class D1 extends getBase() { + constructor() { + super("abc", "def"); + this.x = "x"; + this.y = "y"; + } +} + +class D2 extends getBase() { + constructor() { + super(10); + super(10, 20); + this.x = 1; + this.y = 2; + } +} + +class D3 extends getBase() { + constructor() { + super("abc", 42); + this.x = "x"; + this.y = 2; + } +} + +// Error, no constructors with three type arguments +class D4 extends getBase() { +} + +interface BadBaseConstructor { + new (x: string): Base; + new (x: number): Base; +} + +declare function getBadBase(): BadBaseConstructor; + +// Error, constructor return types differ +class D5 extends getBadBase() { +} + + +//// [classExtendingClassLikeType.js] +var __extends = (this && this.__extends) || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +// Error, no Base constructor function +var D0 = (function (_super) { + __extends(D0, _super); + function D0() { + _super.apply(this, arguments); + } + return D0; +})(Base); +var D1 = (function (_super) { + __extends(D1, _super); + function D1() { + _super.call(this, "abc", "def"); + this.x = "x"; + this.y = "y"; + } + return D1; +})(getBase()); +var D2 = (function (_super) { + __extends(D2, _super); + function D2() { + _super.call(this, 10); + _super.call(this, 10, 20); + this.x = 1; + this.y = 2; + } + return D2; +})(getBase()); +var D3 = (function (_super) { + __extends(D3, _super); + function D3() { + _super.call(this, "abc", 42); + this.x = "x"; + this.y = 2; + } + return D3; +})(getBase()); +// Error, no constructors with three type arguments +var D4 = (function (_super) { + __extends(D4, _super); + function D4() { + _super.apply(this, arguments); + } + return D4; +})(getBase()); +// Error, constructor return types differ +var D5 = (function (_super) { + __extends(D5, _super); + function D5() { + _super.apply(this, arguments); + } + return D5; +})(getBadBase()); diff --git a/tests/baselines/reference/classExtendingNonConstructor.errors.txt b/tests/baselines/reference/classExtendingNonConstructor.errors.txt new file mode 100644 index 00000000000..b1e3994cf1c --- /dev/null +++ b/tests/baselines/reference/classExtendingNonConstructor.errors.txt @@ -0,0 +1,38 @@ +tests/cases/conformance/classes/classDeclarations/classExtendingNonConstructor.ts(7,18): error TS2507: Base expression is not of a constructor function type. +tests/cases/conformance/classes/classDeclarations/classExtendingNonConstructor.ts(8,18): error TS2507: Base expression is not of a constructor function type. +tests/cases/conformance/classes/classDeclarations/classExtendingNonConstructor.ts(9,18): error TS2507: Base expression is not of a constructor function type. +tests/cases/conformance/classes/classDeclarations/classExtendingNonConstructor.ts(10,18): error TS2507: Base expression is not of a constructor function type. +tests/cases/conformance/classes/classDeclarations/classExtendingNonConstructor.ts(11,18): error TS2507: Base expression is not of a constructor function type. +tests/cases/conformance/classes/classDeclarations/classExtendingNonConstructor.ts(12,18): error TS2507: Base expression is not of a constructor function type. +tests/cases/conformance/classes/classDeclarations/classExtendingNonConstructor.ts(13,18): error TS2507: Base expression is not of a constructor function type. + + +==== tests/cases/conformance/classes/classDeclarations/classExtendingNonConstructor.ts (7 errors) ==== + var x: {}; + + function foo() { + this.x = 1; + } + + class C1 extends undefined { } + ~~~~~~~~~ +!!! error TS2507: Base expression is not of a constructor function type. + class C2 extends true { } + ~~~~ +!!! error TS2507: Base expression is not of a constructor function type. + class C3 extends false { } + ~~~~~ +!!! error TS2507: Base expression is not of a constructor function type. + class C4 extends 42 { } + ~~ +!!! error TS2507: Base expression is not of a constructor function type. + class C5 extends "hello" { } + ~~~~~~~ +!!! error TS2507: Base expression is not of a constructor function type. + class C6 extends x { } + ~ +!!! error TS2507: Base expression is not of a constructor function type. + class C7 extends foo { } + ~~~ +!!! error TS2507: Base expression is not of a constructor function type. + \ No newline at end of file diff --git a/tests/baselines/reference/classExtendingNonConstructor.js b/tests/baselines/reference/classExtendingNonConstructor.js new file mode 100644 index 00000000000..f796b30ddd6 --- /dev/null +++ b/tests/baselines/reference/classExtendingNonConstructor.js @@ -0,0 +1,76 @@ +//// [classExtendingNonConstructor.ts] +var x: {}; + +function foo() { + this.x = 1; +} + +class C1 extends undefined { } +class C2 extends true { } +class C3 extends false { } +class C4 extends 42 { } +class C5 extends "hello" { } +class C6 extends x { } +class C7 extends foo { } + + +//// [classExtendingNonConstructor.js] +var __extends = (this && this.__extends) || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var x; +function foo() { + this.x = 1; +} +var C1 = (function (_super) { + __extends(C1, _super); + function C1() { + _super.apply(this, arguments); + } + return C1; +})(undefined); +var C2 = (function (_super) { + __extends(C2, _super); + function C2() { + _super.apply(this, arguments); + } + return C2; +})(true); +var C3 = (function (_super) { + __extends(C3, _super); + function C3() { + _super.apply(this, arguments); + } + return C3; +})(false); +var C4 = (function (_super) { + __extends(C4, _super); + function C4() { + _super.apply(this, arguments); + } + return C4; +})(42); +var C5 = (function (_super) { + __extends(C5, _super); + function C5() { + _super.apply(this, arguments); + } + return C5; +})("hello"); +var C6 = (function (_super) { + __extends(C6, _super); + function C6() { + _super.apply(this, arguments); + } + return C6; +})(x); +var C7 = (function (_super) { + __extends(C7, _super); + function C7() { + _super.apply(this, arguments); + } + return C7; +})(foo); diff --git a/tests/baselines/reference/classExtendingNull.js b/tests/baselines/reference/classExtendingNull.js new file mode 100644 index 00000000000..f0c3ea69626 --- /dev/null +++ b/tests/baselines/reference/classExtendingNull.js @@ -0,0 +1,26 @@ +//// [classExtendingNull.ts] +class C1 extends null { } +class C2 extends (null) { } + + +//// [classExtendingNull.js] +var __extends = (this && this.__extends) || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var C1 = (function (_super) { + __extends(C1, _super); + function C1() { + _super.apply(this, arguments); + } + return C1; +})(null); +var C2 = (function (_super) { + __extends(C2, _super); + function C2() { + _super.apply(this, arguments); + } + return C2; +})((null)); diff --git a/tests/baselines/reference/classExtendingNull.symbols b/tests/baselines/reference/classExtendingNull.symbols new file mode 100644 index 00000000000..37a6162f414 --- /dev/null +++ b/tests/baselines/reference/classExtendingNull.symbols @@ -0,0 +1,7 @@ +=== tests/cases/conformance/classes/classDeclarations/classExtendingNull.ts === +class C1 extends null { } +>C1 : Symbol(C1, Decl(classExtendingNull.ts, 0, 0)) + +class C2 extends (null) { } +>C2 : Symbol(C2, Decl(classExtendingNull.ts, 0, 25)) + diff --git a/tests/baselines/reference/classExtendingNull.types b/tests/baselines/reference/classExtendingNull.types new file mode 100644 index 00000000000..3c572a3406c --- /dev/null +++ b/tests/baselines/reference/classExtendingNull.types @@ -0,0 +1,10 @@ +=== tests/cases/conformance/classes/classDeclarations/classExtendingNull.ts === +class C1 extends null { } +>C1 : C1 +>null : null + +class C2 extends (null) { } +>C2 : C2 +>(null) : null +>null : null + From ec9e46186969dafa7b05760ce89160b77e56b54b Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Mon, 15 Jun 2015 17:31:15 -0700 Subject: [PATCH 08/17] Remove 'strict mode' from parsing and checking, and make it purely something purely checked at bind time. --- src/compiler/binder.ts | 217 +++++++++++++++++- src/compiler/checker.ts | 95 +------- src/compiler/parser.ts | 97 +++----- src/compiler/types.ts | 6 +- .../VariableDeclaration11_es6.errors.txt | 11 +- .../reference/VariableDeclaration11_es6.js | 2 +- .../YieldExpression18_es6.errors.txt | 12 +- .../reference/YieldExpression18_es6.js | 2 +- ...deleteOperatorInvalidOperations.errors.txt | 5 +- .../reference/downlevelLetConst11.errors.txt | 11 +- .../reference/downlevelLetConst11.js | 2 +- .../reference/letAsIdentifier.errors.txt | 15 ++ tests/baselines/reference/letAsIdentifier.js | 4 +- .../reference/letAsIdentifier.symbols | 17 -- .../baselines/reference/letAsIdentifier.types | 21 -- .../letAsIdentifierInStrictMode.errors.txt | 12 +- .../reference/letAsIdentifierInStrictMode.js | 3 +- tests/cases/unittests/incrementalParser.ts | 39 +--- 18 files changed, 316 insertions(+), 255 deletions(-) create mode 100644 tests/baselines/reference/letAsIdentifier.errors.txt delete mode 100644 tests/baselines/reference/letAsIdentifier.symbols delete mode 100644 tests/baselines/reference/letAsIdentifier.types diff --git a/src/compiler/binder.ts b/src/compiler/binder.ts index 42bcd8ac610..9fee2b6f64d 100644 --- a/src/compiler/binder.ts +++ b/src/compiler/binder.ts @@ -88,6 +88,8 @@ namespace ts { let container: Node; let blockScopeContainer: Node; let lastContainer: Node; + let inStrictMode = false; + let symbolCount = 0; let Symbol = objectAllocator.getSymbolConstructor(); let classifiableNames: Map = {}; @@ -531,6 +533,48 @@ namespace ts { typeLiteralSymbol.members = { [symbol.name]: symbol }; } + function bindObjectLiteralExpression(node: ObjectLiteralExpression) { + if (inStrictMode) { + let seen: Map = {}; + const Property = 1; + const NonProperty = 2; + + for (let prop of node.properties) { + if (prop.name.kind !== SyntaxKind.Identifier) { + continue; + } + + let identifier = prop.name; + + // ECMA-262 11.1.5 Object Initialiser + // If previous is not undefined then throw a SyntaxError exception if any of the following conditions are true + // a.This production is contained in strict code and IsDataDescriptor(previous) is true and + // IsDataDescriptor(propId.descriptor) is true. + // b.IsDataDescriptor(previous) is true and IsAccessorDescriptor(propId.descriptor) is true. + // c.IsAccessorDescriptor(previous) is true and IsDataDescriptor(propId.descriptor) is true. + // d.IsAccessorDescriptor(previous) is true and IsAccessorDescriptor(propId.descriptor) is true + // and either both previous and propId.descriptor have[[Get]] fields or both previous and propId.descriptor have[[Set]] fields + let currentKind = prop.kind === SyntaxKind.PropertyAssignment || prop.kind === SyntaxKind.ShorthandPropertyAssignment || prop.kind === SyntaxKind.MethodDeclaration + ? Property + : NonProperty; + + let existingKind = seen[identifier.text]; + if (!existingKind) { + seen[identifier.text] = currentKind; + continue; + } + + if (currentKind === Property && existingKind === Property) { + let span = getErrorSpanForNode(file, identifier); + file.bindDiagnostics.push(createFileDiagnostic(file, span.start, span.length, + Diagnostics.An_object_literal_cannot_have_multiple_properties_with_the_same_name_in_strict_mode)); + } + } + } + + return bindAnonymousDeclaration(node, SymbolFlags.ObjectLiteral, "__object"); + } + function bindAnonymousDeclaration(node: Declaration, symbolFlags: SymbolFlags, name: string) { let symbol = createSymbol(symbolFlags, name); addDeclarationToSymbol(symbol, node, symbolFlags); @@ -563,10 +607,11 @@ namespace ts { // The binder visits every node in the syntax tree so it is a convenient place to perform a single localized // check for reserved words used as identifiers in strict mode code. function checkStrictModeIdentifier(node: Identifier) { - if (node.parserContextFlags & ParserContextFlags.StrictMode && + if (inStrictMode && node.originalKeywordKind >= SyntaxKind.FirstFutureReservedWord && node.originalKeywordKind <= SyntaxKind.LastFutureReservedWord && !isIdentifierName(node)) { + // Report error only if there are no parse errors in file if (!file.parseDiagnostics.length) { let message = getAncestor(node, SyntaxKind.ClassDeclaration) || getAncestor(node, SyntaxKind.ClassExpression) ? @@ -577,6 +622,96 @@ namespace ts { } } + function checkStrictModeBinaryExpression(node: BinaryExpression) { + if (inStrictMode && isLeftHandSideExpression(node.left) && isAssignmentOperator(node.operatorToken.kind)) { + // ECMA 262 (Annex C) The identifier eval or arguments may not appear as the LeftHandSideExpression of an + // Assignment operator(11.13) or of a PostfixExpression(11.3) + checkGrammarEvalOrArgumentsInStrictMode(node, node.left); + } + } + + function checkStrictModeCatchClause(node: CatchClause) { + // It is a SyntaxError if a TryStatement with a Catch occurs within strict code and the Identifier of the + // Catch production is eval or arguments + if (inStrictMode && node.variableDeclaration) { + checkGrammarEvalOrArgumentsInStrictMode(node, node.variableDeclaration.name); + } + } + + function checkStrictModeDeleteExpression(node: DeleteExpression) { + // Grammar checking + if (inStrictMode && node.expression.kind === SyntaxKind.Identifier) { + // When a delete operator occurs within strict mode code, a SyntaxError is thrown if its + // UnaryExpression is a direct reference to a variable, function argument, or function name + let span = getErrorSpanForNode(file, node.expression); + file.bindDiagnostics.push(createFileDiagnostic(file, span.start, span.length, Diagnostics.delete_cannot_be_called_on_an_identifier_in_strict_mode)); + } + } + + function isEvalOrArgumentsIdentifier(node: Node): boolean { + return node.kind === SyntaxKind.Identifier && + ((node).text === "eval" || (node).text === "arguments"); + } + + function checkGrammarEvalOrArgumentsInStrictMode(contextNode: Node, name: Node) { + if (name && name.kind === SyntaxKind.Identifier) { + let identifier = name; + if (isEvalOrArgumentsIdentifier(identifier)) { + // We check first if the name is inside class declaration or class expression; if so give explicit message + // otherwise report generic error message. + let span = getErrorSpanForNode(file, name); + let message = getAncestor(identifier, SyntaxKind.ClassDeclaration) || getAncestor(identifier, SyntaxKind.ClassExpression) ? + Diagnostics.Invalid_use_of_0_Class_definitions_are_automatically_in_strict_mode : + Diagnostics.Invalid_use_of_0_in_strict_mode; + file.bindDiagnostics.push(createFileDiagnostic(file, span.start, span.length, message, identifier.text)); + } + } + } + + function checkStrictModeFunctionName(node: FunctionLikeDeclaration) { + if (inStrictMode) { + // It is a SyntaxError if the identifier eval or arguments appears within a FormalParameterList of a strict mode FunctionDeclaration or FunctionExpression (13.1)) + checkGrammarEvalOrArgumentsInStrictMode(node, node.name); + } + } + + function checkStrictModeNumericLiteral(node: LiteralExpression) { + if (inStrictMode && node.flags & NodeFlags.OctalLiteral) { + file.bindDiagnostics.push(createDiagnosticForNode(node, Diagnostics.Octal_literals_are_not_allowed_in_strict_mode)); + } + } + + function checkStrictModePostfixUnaryExpression(node: PostfixUnaryExpression) { + // Grammar checking + // The identifier eval or arguments may not appear as the LeftHandSideExpression of an + // Assignment operator(11.13) or of a PostfixExpression(11.3) or as the UnaryExpression + // operated upon by a Prefix Increment(11.4.4) or a Prefix Decrement(11.4.5) operator. + if (inStrictMode) { + checkGrammarEvalOrArgumentsInStrictMode(node, node.operand); + } + } + + function checkStrictModePrefixUnaryExpression(node: PrefixUnaryExpression) { + // Grammar checking + if (inStrictMode) { + if (node.operator === SyntaxKind.PlusPlusToken || node.operator === SyntaxKind.MinusMinusToken) { + checkGrammarEvalOrArgumentsInStrictMode(node, node.operand); + } + } + } + + function checkStrictModeWithStatement(node: WithStatement) { + // Grammar checking for withStatement + if (inStrictMode) { + grammarErrorOnFirstToken(node, Diagnostics.with_statements_are_not_allowed_in_strict_mode); + } + } + + function grammarErrorOnFirstToken(node: Node, message: DiagnosticMessage, arg0?: any, arg1?: any, arg2?: any) { + let span = getSpanOfTokenAtPosition(file, node.pos); + file.bindDiagnostics.push(createFileDiagnostic(file, span.start, span.length, message, arg0, arg1, arg2)); + } + function getDestructuringParameterName(node: Declaration) { return "__" + indexOf((node.parent).parameters, node); } @@ -584,6 +719,11 @@ namespace ts { function bind(node: Node) { node.parent = parent; + var savedInStrictMode = inStrictMode; + if (!savedInStrictMode) { + updateStrictMode(node); + } + // First we bind declaration nodes to a symbol if possible. We'll both create a symbol // and then potentially add the symbol to an appropriate symbol table. Possible // destination symbol tables are: @@ -601,19 +741,76 @@ namespace ts { // the current 'container' node when it changes. This helps us know which symbol table // a local should go into for example. bindChildren(node); + + inStrictMode = savedInStrictMode; + } + + function updateStrictMode(node: Node) { + switch (node.kind) { + case SyntaxKind.SourceFile: + updateStrictModeStatementList((node).statements); + return; + case SyntaxKind.Block: + if (isFunctionLike(node.parent)) { + updateStrictModeStatementList((node).statements); + } + return; + case SyntaxKind.ClassDeclaration: + case SyntaxKind.ClassExpression: + inStrictMode = true; + return; + } + } + + function updateStrictModeStatementList(statements: NodeArray) { + for (let statement of statements) { + if (!isPrologueDirective(statement)) { + return; + } + + if (isUseStrictPrologueDirective(statement)) { + inStrictMode = true; + return; + } + } } + /// Should be called only on prologue directives (isPrologueDirective(node) should be true) + function isUseStrictPrologueDirective(node: Node): boolean { + Debug.assert(isPrologueDirective(node)); + let nodeText = getTextOfNodeFromSourceText(file.text, (node).expression); + + // Note: the node text must be exactly "use strict" or 'use strict'. It is not ok for the + // string to contain unicode escapes (as per ES5). + return nodeText === '"use strict"' || nodeText === "'use strict'"; + } + function bindWorker(node: Node) { switch (node.kind) { case SyntaxKind.Identifier: return checkStrictModeIdentifier(node); + case SyntaxKind.BinaryExpression: + return checkStrictModeBinaryExpression(node); + case SyntaxKind.CatchClause: + return checkStrictModeCatchClause(node); + case SyntaxKind.DeleteExpression: + return checkStrictModeDeleteExpression(node); + case SyntaxKind.NumericLiteral: + return checkStrictModeNumericLiteral(node); + case SyntaxKind.PostfixUnaryExpression: + return checkStrictModePostfixUnaryExpression(node); + case SyntaxKind.PrefixUnaryExpression: + return checkStrictModePrefixUnaryExpression(node); + case SyntaxKind.WithStatement: + return checkStrictModeWithStatement(node); + case SyntaxKind.TypeParameter: return declareSymbolAndAddToSymbolTable(node, SymbolFlags.TypeParameter, SymbolFlags.TypeParameterExcludes); case SyntaxKind.Parameter: return bindParameter(node); - case SyntaxKind.VariableDeclaration: case SyntaxKind.BindingElement: - return bindVariableDeclarationOrBindingElement(node); + case SyntaxKind.VariableDeclaration: + return bindVariableDeclarationOrBindingElement(node); case SyntaxKind.PropertyDeclaration: case SyntaxKind.PropertySignature: return bindPropertyOrMethodOrAccessor(node, SymbolFlags.Property | ((node).questionToken ? SymbolFlags.Optional : SymbolFlags.None), SymbolFlags.PropertyExcludes); @@ -635,6 +832,7 @@ namespace ts { return bindPropertyOrMethodOrAccessor(node, SymbolFlags.Method | ((node).questionToken ? SymbolFlags.Optional : SymbolFlags.None), isObjectLiteralMethod(node) ? SymbolFlags.PropertyExcludes : SymbolFlags.MethodExcludes); case SyntaxKind.FunctionDeclaration: + checkStrictModeFunctionName(node); return declareSymbolAndAddToSymbolTable(node, SymbolFlags.Function, SymbolFlags.FunctionExcludes); case SyntaxKind.Constructor: return declareSymbolAndAddToSymbolTable(node, SymbolFlags.Constructor, /*symbolExcludes:*/ SymbolFlags.None); @@ -648,9 +846,10 @@ namespace ts { case SyntaxKind.TypeLiteral: return bindAnonymousDeclaration(node, SymbolFlags.TypeLiteral, "__type"); case SyntaxKind.ObjectLiteralExpression: - return bindAnonymousDeclaration(node, SymbolFlags.ObjectLiteral, "__object"); + return bindObjectLiteralExpression(node); case SyntaxKind.FunctionExpression: case SyntaxKind.ArrowFunction: + checkStrictModeFunctionName(node); return bindAnonymousDeclaration(node, SymbolFlags.Function, "__function"); case SyntaxKind.ClassExpression: case SyntaxKind.ClassDeclaration: @@ -756,6 +955,10 @@ namespace ts { } function bindVariableDeclarationOrBindingElement(node: VariableDeclaration | BindingElement) { + if (inStrictMode) { + checkGrammarEvalOrArgumentsInStrictMode(node, node.name) + } + if (!isBindingPattern(node.name)) { if (isBlockOrCatchScoped(node)) { bindBlockScopedVariableDeclaration(node); @@ -779,6 +982,12 @@ namespace ts { } function bindParameter(node: ParameterDeclaration) { + if (inStrictMode) { + // It is a SyntaxError if the identifier eval or arguments appears within a FormalParameterList of a + // strict mode FunctionLikeDeclaration or FunctionExpression(13.1) + checkGrammarEvalOrArgumentsInStrictMode(node, node.name); + } + if (isBindingPattern(node.name)) { bindAnonymousDeclaration(node, SymbolFlags.FunctionScopedVariable, getDestructuringParameterName(node)); } diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 86639b9c758..e27e69bb993 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -7734,7 +7734,7 @@ namespace ts { // Grammar checking let hasGrammarError = checkGrammarFunctionLikeDeclaration(node); if (!hasGrammarError && node.kind === SyntaxKind.FunctionExpression) { - checkGrammarFunctionName(node.name) || checkGrammarForGenerator(node); + checkGrammarForGenerator(node); } // The identityMapper object is used to indicate that function expressions are wildcards @@ -7891,14 +7891,7 @@ namespace ts { } function checkDeleteExpression(node: DeleteExpression): Type { - // Grammar checking - if (node.parserContextFlags & ParserContextFlags.StrictMode && node.expression.kind === SyntaxKind.Identifier) { - // When a delete operator occurs within strict mode code, a SyntaxError is thrown if its - // UnaryExpression is a direct reference to a variable, function argument, or function name - grammarErrorOnNode(node.expression, Diagnostics.delete_cannot_be_called_on_an_identifier_in_strict_mode); - } - - let operandType = checkExpression(node.expression); + checkExpression(node.expression); return booleanType; } @@ -7913,14 +7906,6 @@ namespace ts { } function checkPrefixUnaryExpression(node: PrefixUnaryExpression): Type { - // Grammar checking - // The identifier eval or arguments may not appear as the LeftHandSideExpression of an - // Assignment operator(11.13) or of a PostfixExpression(11.3) or as the UnaryExpression - // operated upon by a Prefix Increment(11.4.4) or a Prefix Decrement(11.4.5) operator - if ((node.operator === SyntaxKind.PlusPlusToken || node.operator === SyntaxKind.MinusMinusToken)) { - checkGrammarEvalOrArgumentsInStrictMode(node, node.operand); - } - let operandType = checkExpression(node.operand); switch (node.operator) { case SyntaxKind.PlusToken: @@ -7947,12 +7932,6 @@ namespace ts { } function checkPostfixUnaryExpression(node: PostfixUnaryExpression): Type { - // Grammar checking - // The identifier eval or arguments may not appear as the LeftHandSideExpression of an - // Assignment operator(11.13) or of a PostfixExpression(11.3) or as the UnaryExpression - // operated upon by a Prefix Increment(11.4.4) or a Prefix Decrement(11.4.5) operator. - checkGrammarEvalOrArgumentsInStrictMode(node, node.operand); - let operandType = checkExpression(node.operand); let ok = checkArithmeticOperandType(node.operand, operandType, Diagnostics.An_arithmetic_operand_must_be_of_type_any_number_or_an_enum_type); if (ok) { @@ -8132,13 +8111,6 @@ namespace ts { } function checkBinaryExpression(node: BinaryExpression, contextualMapper?: TypeMapper) { - // Grammar checking - if (isLeftHandSideExpression(node.left) && isAssignmentOperator(node.operatorToken.kind)) { - // ECMA 262 (Annex C) The identifier eval or arguments may not appear as the LeftHandSideExpression of an - // Assignment operator(11.13) or of a PostfixExpression(11.3) - checkGrammarEvalOrArgumentsInStrictMode(node, node.left); - } - let operator = node.operatorToken.kind; if (operator === SyntaxKind.EqualsToken && (node.left.kind === SyntaxKind.ObjectLiteralExpression || node.left.kind === SyntaxKind.ArrayLiteralExpression)) { return checkDestructuringAssignment(node.left, checkExpression(node.right, contextualMapper), contextualMapper); @@ -8580,11 +8552,9 @@ namespace ts { // It is a SyntaxError if the Identifier "eval" or the Identifier "arguments" occurs as the // Identifier in a PropertySetParameterList of a PropertyAssignment that is contained in strict code // or if its FunctionBody is strict code(11.1.5). - // It is a SyntaxError if the identifier eval or arguments appears within a FormalParameterList of a - // strict mode FunctionLikeDeclaration or FunctionExpression(13.1) // Grammar checking - checkGrammarDecorators(node) || checkGrammarModifiers(node) || checkGrammarEvalOrArgumentsInStrictMode(node, node.name); + checkGrammarDecorators(node) || checkGrammarModifiers(node); checkVariableLikeDeclaration(node); let func = getContainingFunction(node); @@ -9476,9 +9446,7 @@ namespace ts { function checkFunctionDeclaration(node: FunctionDeclaration): void { if (produceDiagnostics) { - checkFunctionLikeDeclaration(node) || - checkGrammarFunctionName(node.name) || - checkGrammarForGenerator(node); + checkFunctionLikeDeclaration(node) || checkGrammarForGenerator(node); checkCollisionWithCapturedSuperVariable(node, node.name); checkCollisionWithCapturedThisVariable(node, node.name); @@ -10305,12 +10273,7 @@ namespace ts { } function checkWithStatement(node: WithStatement) { - // Grammar checking for withStatement - if (!checkGrammarStatementInAmbientContext(node)) { - if (node.parserContextFlags & ParserContextFlags.StrictMode) { - grammarErrorOnFirstToken(node, Diagnostics.with_statements_are_not_allowed_in_strict_mode); - } - } + checkGrammarStatementInAmbientContext(node); checkExpression(node.expression); error(node.expression, Diagnostics.All_symbols_within_a_with_block_will_be_resolved_to_any); @@ -10414,10 +10377,6 @@ namespace ts { grammarErrorOnNode(localSymbol.valueDeclaration, Diagnostics.Cannot_redeclare_identifier_0_in_catch_clause, identifierName); } } - - // It is a SyntaxError if a TryStatement with a Catch occurs within strict code and the Identifier of the - // Catch production is eval or arguments - checkGrammarEvalOrArgumentsInStrictMode(node, catchClause.variableDeclaration.name); } } @@ -13022,11 +12981,6 @@ namespace ts { } } - function checkGrammarFunctionName(name: Node) { - // It is a SyntaxError if the identifier eval or arguments appears within a FormalParameterList of a strict mode FunctionDeclaration or FunctionExpression (13.1)) - return checkGrammarEvalOrArgumentsInStrictMode(name, name); - } - function checkGrammarForInvalidQuestionMark(node: Declaration, questionToken: Node, message: DiagnosticMessage): boolean { if (questionToken) { return grammarErrorOnNode(questionToken, message); @@ -13039,7 +12993,6 @@ namespace ts { let GetAccessor = 2; let SetAccesor = 4; let GetOrSetAccessor = GetAccessor | SetAccesor; - let inStrictMode = (node.parserContextFlags & ParserContextFlags.StrictMode) !== 0; for (let prop of node.properties) { let name = prop.name; @@ -13086,9 +13039,7 @@ namespace ts { else { let existingKind = seen[(name).text]; if (currentKind === Property && existingKind === Property) { - if (inStrictMode) { - grammarErrorOnNode(name, Diagnostics.An_object_literal_cannot_have_multiple_properties_with_the_same_name_in_strict_mode); - } + continue; } else if ((currentKind & GetOrSetAccessor) && (existingKind & GetOrSetAccessor)) { if (existingKind !== GetOrSetAccessor && currentKind !== existingKind) { @@ -13311,9 +13262,6 @@ namespace ts { return grammarErrorAtPos(getSourceFileOfNode(node), node.initializer.pos - 1, 1, Diagnostics.A_rest_element_cannot_have_an_initializer); } } - // It is a SyntaxError if a VariableDeclaration or VariableDeclarationNoIn occurs within strict code - // and its Identifier is eval or arguments - return checkGrammarEvalOrArgumentsInStrictMode(node, node.name); } function checkGrammarVariableDeclaration(node: VariableDeclaration) { @@ -13345,8 +13293,7 @@ namespace ts { // It is a SyntaxError if a VariableDeclaration or VariableDeclarationNoIn occurs within strict code // and its Identifier is eval or arguments - return (checkLetConstNames && checkGrammarNameInLetOrConstDeclarations(node.name)) || - checkGrammarEvalOrArgumentsInStrictMode(node, node.name); + return checkLetConstNames && checkGrammarNameInLetOrConstDeclarations(node.name); } function checkGrammarNameInLetOrConstDeclarations(name: Identifier | BindingPattern): boolean { @@ -13485,25 +13432,6 @@ namespace ts { } } - function checkGrammarEvalOrArgumentsInStrictMode(contextNode: Node, name: Node): boolean { - if (name && name.kind === SyntaxKind.Identifier) { - let identifier = name; - if (contextNode && (contextNode.parserContextFlags & ParserContextFlags.StrictMode) && isEvalOrArgumentsIdentifier(identifier)) { - // We check first if the name is inside class declaration or class expression; if so give explicit message - // otherwise report generic error message. - let message = getAncestor(identifier, SyntaxKind.ClassDeclaration) || getAncestor(identifier, SyntaxKind.ClassExpression) ? - Diagnostics.Invalid_use_of_0_Class_definitions_are_automatically_in_strict_mode : - Diagnostics.Invalid_use_of_0_in_strict_mode; - return grammarErrorOnNode(identifier, message, declarationNameToString(identifier)); - } - } - } - - function isEvalOrArgumentsIdentifier(node: Node): boolean { - return node.kind === SyntaxKind.Identifier && - ((node).text === "eval" || (node).text === "arguments"); - } - function checkGrammarConstructorTypeParameters(node: ConstructorDeclaration) { if (node.typeParameters) { return grammarErrorAtPos(getSourceFileOfNode(node), node.typeParameters.pos, node.typeParameters.end - node.typeParameters.pos, Diagnostics.Type_parameters_cannot_appear_on_a_constructor_declaration); @@ -13613,13 +13541,8 @@ namespace ts { function checkGrammarNumericLiteral(node: Identifier): boolean { // Grammar checking - if (node.flags & NodeFlags.OctalLiteral) { - if (node.parserContextFlags & ParserContextFlags.StrictMode) { - return grammarErrorOnNode(node, Diagnostics.Octal_literals_are_not_allowed_in_strict_mode); - } - else if (languageVersion >= ScriptTarget.ES5) { - return grammarErrorOnNode(node, Diagnostics.Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher); - } + if (node.flags & NodeFlags.OctalLiteral && languageVersion >= ScriptTarget.ES5) { + return grammarErrorOnNode(node, Diagnostics.Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher); } } diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index f964febaf5d..a507125d4bb 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -544,7 +544,7 @@ namespace ts { token = nextToken(); processReferenceComments(sourceFile); - sourceFile.statements = parseList(ParsingContext.SourceElements, /*checkForStrictMode*/ true, parseStatement); + sourceFile.statements = parseList(ParsingContext.SourceElements, parseStatement); Debug.assert(token === SyntaxKind.EndOfFileToken); sourceFile.endOfFileToken = parseTokenNode(); @@ -647,10 +647,6 @@ namespace ts { } } - function setStrictModeContext(val: boolean) { - setContextFlag(val, ParserContextFlags.StrictMode); - } - function setDisallowInContext(val: boolean) { setContextFlag(val, ParserContextFlags.DisallowIn); } @@ -744,10 +740,6 @@ namespace ts { return (contextFlags & ParserContextFlags.Yield) !== 0; } - function inStrictModeContext() { - return (contextFlags & ParserContextFlags.StrictMode) !== 0; - } - function inGeneratorParameterContext() { return (contextFlags & ParserContextFlags.GeneratorParameter) !== 0; } @@ -1323,31 +1315,17 @@ namespace ts { } // Parses a list of elements - function parseList(kind: ParsingContext, checkForStrictMode: boolean, parseElement: () => T): NodeArray { + function parseList(kind: ParsingContext, parseElement: () => T): NodeArray { let saveParsingContext = parsingContext; parsingContext |= 1 << kind; let result = >[]; result.pos = getNodePos(); - let savedStrictModeContext = inStrictModeContext(); while (!isListTerminator(kind)) { if (isListElement(kind, /* inErrorRecovery */ false)) { let element = parseListElement(kind, parseElement); result.push(element); - // test elements only if we are not already in strict mode - if (checkForStrictMode && !inStrictModeContext()) { - if (isPrologueDirective(element)) { - if (isUseStrictPrologueDirective(element)) { - setStrictModeContext(true); - checkForStrictMode = false; - } - } - else { - checkForStrictMode = false; - } - } - continue; } @@ -1356,22 +1334,11 @@ namespace ts { } } - setStrictModeContext(savedStrictModeContext); result.end = getNodeEnd(); parsingContext = saveParsingContext; return result; } - /// Should be called only on prologue directives (isPrologueDirective(node) should be true) - function isUseStrictPrologueDirective(node: Node): boolean { - Debug.assert(isPrologueDirective(node)); - let nodeText = getTextOfNodeFromSourceText(sourceText, (node).expression); - - // Note: the node text must be exactly "use strict" or 'use strict'. It is not ok for the - // string to contain unicode escapes (as per ES5). - return nodeText === '"use strict"' || nodeText === "'use strict'"; - } - function parseListElement(parsingContext: ParsingContext, parseElement: () => T): T { let node = currentNode(parsingContext); if (node) { @@ -2276,7 +2243,7 @@ namespace ts { function parseObjectTypeMembers(): NodeArray { let members: NodeArray; if (parseExpected(SyntaxKind.OpenBraceToken)) { - members = parseList(ParsingContext.TypeMembers, /*checkForStrictMode*/ false, parseTypeMember); + members = parseList(ParsingContext.TypeMembers, parseTypeMember); parseExpected(SyntaxKind.CloseBraceToken); } else { @@ -2645,12 +2612,6 @@ namespace ts { return true; } - if (inStrictModeContext()) { - // If we're in strict mode, then 'yield' is a keyword, could only ever start - // a yield expression. - return true; - } - // We're in a context where 'yield expr' is not allowed. However, if we can // definitely tell that the user was trying to parse a 'yield expr' and not // just a normal expr that start with a 'yield' identifier, then parse out @@ -2665,7 +2626,7 @@ namespace ts { // for now we just check if the next token is an identifier. More heuristics // can be added here later as necessary. We just need to make sure that we // don't accidently consume something legal. - return lookAhead(nextTokenIsIdentifierOnSameLine); + return lookAhead(nextTokenIsIdentifierOrKeywordOrNumberOnSameLine); } return false; @@ -3508,10 +3469,10 @@ namespace ts { } // STATEMENTS - function parseBlock(ignoreMissingOpenBrace: boolean, checkForStrictMode: boolean, diagnosticMessage?: DiagnosticMessage): Block { + function parseBlock(ignoreMissingOpenBrace: boolean, diagnosticMessage?: DiagnosticMessage): Block { let node = createNode(SyntaxKind.Block); if (parseExpected(SyntaxKind.OpenBraceToken, diagnosticMessage) || ignoreMissingOpenBrace) { - node.statements = parseList(ParsingContext.BlockStatements, checkForStrictMode, parseStatement); + node.statements = parseList(ParsingContext.BlockStatements, parseStatement); parseExpected(SyntaxKind.CloseBraceToken); } else { @@ -3531,7 +3492,7 @@ namespace ts { setDecoratorContext(false); } - let block = parseBlock(ignoreMissingOpenBrace, /*checkForStrictMode*/ true, diagnosticMessage); + let block = parseBlock(ignoreMissingOpenBrace, diagnosticMessage); if (saveDecoratorContext) { setDecoratorContext(true); @@ -3673,7 +3634,7 @@ namespace ts { parseExpected(SyntaxKind.CaseKeyword); node.expression = allowInAnd(parseExpression); parseExpected(SyntaxKind.ColonToken); - node.statements = parseList(ParsingContext.SwitchClauseStatements, /*checkForStrictMode*/ false, parseStatement); + node.statements = parseList(ParsingContext.SwitchClauseStatements, parseStatement); return finishNode(node); } @@ -3681,7 +3642,7 @@ namespace ts { let node = createNode(SyntaxKind.DefaultClause); parseExpected(SyntaxKind.DefaultKeyword); parseExpected(SyntaxKind.ColonToken); - node.statements = parseList(ParsingContext.SwitchClauseStatements, /*checkForStrictMode*/ false, parseStatement); + node.statements = parseList(ParsingContext.SwitchClauseStatements, parseStatement); return finishNode(node); } @@ -3697,7 +3658,7 @@ namespace ts { parseExpected(SyntaxKind.CloseParenToken); let caseBlock = createNode(SyntaxKind.CaseBlock, scanner.getStartPos()); parseExpected(SyntaxKind.OpenBraceToken); - caseBlock.clauses = parseList(ParsingContext.SwitchClauses, /*checkForStrictMode*/ false, parseCaseOrDefaultClause); + caseBlock.clauses = parseList(ParsingContext.SwitchClauses, parseCaseOrDefaultClause); parseExpected(SyntaxKind.CloseBraceToken); node.caseBlock = finishNode(caseBlock); return finishNode(node); @@ -3724,14 +3685,14 @@ namespace ts { let node = createNode(SyntaxKind.TryStatement); parseExpected(SyntaxKind.TryKeyword); - node.tryBlock = parseBlock(/*ignoreMissingOpenBrace*/ false, /*checkForStrictMode*/ false); + node.tryBlock = parseBlock(/*ignoreMissingOpenBrace*/ false); node.catchClause = token === SyntaxKind.CatchKeyword ? parseCatchClause() : undefined; // If we don't have a catch clause, then we must have a finally clause. Try to parse // one out no matter what. if (!node.catchClause || token === SyntaxKind.FinallyKeyword) { parseExpected(SyntaxKind.FinallyKeyword); - node.finallyBlock = parseBlock(/*ignoreMissingOpenBrace*/ false, /*checkForStrictMode*/ false); + node.finallyBlock = parseBlock(/*ignoreMissingOpenBrace*/ false); } return finishNode(node); @@ -3745,7 +3706,7 @@ namespace ts { } parseExpected(SyntaxKind.CloseParenToken); - result.block = parseBlock(/*ignoreMissingOpenBrace*/ false, /*checkForStrictMode*/ false); + result.block = parseBlock(/*ignoreMissingOpenBrace*/ false); return finishNode(result); } @@ -3786,6 +3747,11 @@ namespace ts { return isIdentifierOrKeyword() && !scanner.hasPrecedingLineBreak(); } + function nextTokenIsIdentifierOrKeywordOrNumberOnSameLine() { + nextToken(); + return (isIdentifierOrKeyword() || token === SyntaxKind.NumericLiteral) && !scanner.hasPrecedingLineBreak(); + } + function isDeclaration(): boolean { while (true) { switch (token) { @@ -3913,16 +3879,15 @@ namespace ts { } } - function nextTokenIsIdentifierOrStartOfDestructuringOnTheSameLine() { + function nextTokenIsIdentifierOrStartOfDestructuring() { nextToken(); - return !scanner.hasPrecedingLineBreak() && - (isIdentifier() || token === SyntaxKind.OpenBraceToken || token === SyntaxKind.OpenBracketToken); + return isIdentifier() || token === SyntaxKind.OpenBraceToken || token === SyntaxKind.OpenBracketToken; } function isLetDeclaration() { - // It is let declaration if in strict mode or next token is identifier\open bracket\open curly on same line. - // otherwise it needs to be treated like identifier - return inStrictModeContext() || lookAhead(nextTokenIsIdentifierOrStartOfDestructuringOnTheSameLine); + // In ES6 'let' always starts a lexical declaration if followed by an identifier or { + // or [. + return lookAhead(nextTokenIsIdentifierOrStartOfDestructuring); } function parseStatement(): Statement { @@ -3930,7 +3895,7 @@ namespace ts { case SyntaxKind.SemicolonToken: return parseEmptyStatement(); case SyntaxKind.OpenBraceToken: - return parseBlock(/*ignoreMissingOpenBrace*/ false, /*checkForStrictMode*/ false); + return parseBlock(/*ignoreMissingOpenBrace*/ false); case SyntaxKind.VarKeyword: return parseVariableStatement(scanner.getStartPos(), /*decorators*/ undefined, /*modifiers*/ undefined); case SyntaxKind.LetKeyword: @@ -4448,10 +4413,6 @@ namespace ts { } function parseClassDeclarationOrExpression(fullStart: number, decorators: NodeArray, modifiers: ModifiersArray, kind: SyntaxKind): ClassLikeDeclaration { - // In ES6 specification, All parts of a ClassDeclaration or a ClassExpression are strict mode code - let savedStrictModeContext = inStrictModeContext(); - setStrictModeContext(true); - var node = createNode(kind, fullStart); node.decorators = decorators; setModifiers(node, modifiers); @@ -4474,9 +4435,7 @@ namespace ts { node.members = createMissingList(); } - var finishedNode = finishNode(node); - setStrictModeContext(savedStrictModeContext); - return finishedNode; + return finishNode(node); } function parseHeritageClauses(isClassHeritageClause: boolean): NodeArray { @@ -4494,7 +4453,7 @@ namespace ts { } function parseHeritageClausesWorker() { - return parseList(ParsingContext.HeritageClauses, /*checkForStrictMode*/ false, parseHeritageClause); + return parseList(ParsingContext.HeritageClauses, parseHeritageClause); } function parseHeritageClause() { @@ -4524,7 +4483,7 @@ namespace ts { } function parseClassMembers() { - return parseList(ParsingContext.ClassMembers, /*checkForStrictMode*/ false, parseClassElement); + return parseList(ParsingContext.ClassMembers, parseClassElement); } function parseInterfaceDeclaration(fullStart: number, decorators: NodeArray, modifiers: ModifiersArray): InterfaceDeclaration { @@ -4582,7 +4541,7 @@ namespace ts { function parseModuleBlock(): ModuleBlock { let node = createNode(SyntaxKind.ModuleBlock, scanner.getStartPos()); if (parseExpected(SyntaxKind.OpenBraceToken)) { - node.statements = parseList(ParsingContext.BlockStatements, /*checkForStrictMode*/ false, parseStatement); + node.statements = parseList(ParsingContext.BlockStatements, parseStatement); parseExpected(SyntaxKind.CloseBraceToken); } else { diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 9c0fd3d0b2f..8e272102145 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -362,10 +362,6 @@ namespace ts { export const enum ParserContextFlags { None = 0, - // Set if this node was parsed in strict mode. Used for grammar error checks, as well as - // checking if the node can be reused in incremental settings. - StrictMode = 1 << 0, - // If this node was parsed in a context where 'in-expressions' are not allowed. DisallowIn = 1 << 1, @@ -388,7 +384,7 @@ namespace ts { JavaScriptFile = 1 << 6, // Context flags set directly by the parser. - ParserGeneratedFlags = StrictMode | DisallowIn | Yield | GeneratorParameter | Decorator | ThisNodeHasError, + ParserGeneratedFlags = DisallowIn | Yield | GeneratorParameter | Decorator | ThisNodeHasError, // Context flags computed by aggregating child flags upwards. diff --git a/tests/baselines/reference/VariableDeclaration11_es6.errors.txt b/tests/baselines/reference/VariableDeclaration11_es6.errors.txt index 8c0ef5f8690..d1e6ab7c154 100644 --- a/tests/baselines/reference/VariableDeclaration11_es6.errors.txt +++ b/tests/baselines/reference/VariableDeclaration11_es6.errors.txt @@ -1,8 +1,11 @@ -tests/cases/conformance/es6/variableDeclarations/VariableDeclaration11_es6.ts(2,4): error TS1123: Variable declaration list cannot be empty. +tests/cases/conformance/es6/variableDeclarations/VariableDeclaration11_es6.ts(2,1): error TS1212: Identifier expected. 'let' is a reserved word in strict mode +tests/cases/conformance/es6/variableDeclarations/VariableDeclaration11_es6.ts(2,1): error TS2304: Cannot find name 'let'. -==== tests/cases/conformance/es6/variableDeclarations/VariableDeclaration11_es6.ts (1 errors) ==== +==== tests/cases/conformance/es6/variableDeclarations/VariableDeclaration11_es6.ts (2 errors) ==== "use strict"; let - -!!! error TS1123: Variable declaration list cannot be empty. \ No newline at end of file + ~~~ +!!! error TS1212: Identifier expected. 'let' is a reserved word in strict mode + ~~~ +!!! error TS2304: Cannot find name 'let'. \ No newline at end of file diff --git a/tests/baselines/reference/VariableDeclaration11_es6.js b/tests/baselines/reference/VariableDeclaration11_es6.js index 83eec6d9a13..cf4c14617bc 100644 --- a/tests/baselines/reference/VariableDeclaration11_es6.js +++ b/tests/baselines/reference/VariableDeclaration11_es6.js @@ -4,4 +4,4 @@ let //// [VariableDeclaration11_es6.js] "use strict"; -let ; +let; diff --git a/tests/baselines/reference/YieldExpression18_es6.errors.txt b/tests/baselines/reference/YieldExpression18_es6.errors.txt index 056fc0e950a..5dd2807716f 100644 --- a/tests/baselines/reference/YieldExpression18_es6.errors.txt +++ b/tests/baselines/reference/YieldExpression18_es6.errors.txt @@ -1,8 +1,14 @@ -tests/cases/conformance/es6/yieldExpressions/YieldExpression18_es6.ts(2,1): error TS1163: A 'yield' expression is only allowed in a generator body. +tests/cases/conformance/es6/yieldExpressions/YieldExpression18_es6.ts(2,1): error TS1212: Identifier expected. 'yield' is a reserved word in strict mode +tests/cases/conformance/es6/yieldExpressions/YieldExpression18_es6.ts(2,1): error TS2304: Cannot find name 'yield'. +tests/cases/conformance/es6/yieldExpressions/YieldExpression18_es6.ts(2,7): error TS2304: Cannot find name 'foo'. -==== tests/cases/conformance/es6/yieldExpressions/YieldExpression18_es6.ts (1 errors) ==== +==== tests/cases/conformance/es6/yieldExpressions/YieldExpression18_es6.ts (3 errors) ==== "use strict"; yield(foo); ~~~~~ -!!! error TS1163: A 'yield' expression is only allowed in a generator body. \ No newline at end of file +!!! error TS1212: Identifier expected. 'yield' is a reserved word in strict mode + ~~~~~ +!!! error TS2304: Cannot find name 'yield'. + ~~~ +!!! error TS2304: Cannot find name 'foo'. \ No newline at end of file diff --git a/tests/baselines/reference/YieldExpression18_es6.js b/tests/baselines/reference/YieldExpression18_es6.js index b4ba37d3ac4..36be3faabfe 100644 --- a/tests/baselines/reference/YieldExpression18_es6.js +++ b/tests/baselines/reference/YieldExpression18_es6.js @@ -4,4 +4,4 @@ yield(foo); //// [YieldExpression18_es6.js] "use strict"; -yield (foo); +yield(foo); diff --git a/tests/baselines/reference/deleteOperatorInvalidOperations.errors.txt b/tests/baselines/reference/deleteOperatorInvalidOperations.errors.txt index 5f7c6d70450..d50be713d0a 100644 --- a/tests/baselines/reference/deleteOperatorInvalidOperations.errors.txt +++ b/tests/baselines/reference/deleteOperatorInvalidOperations.errors.txt @@ -1,9 +1,10 @@ tests/cases/conformance/expressions/unaryOperators/deleteOperator/deleteOperatorInvalidOperations.ts(5,20): error TS1005: ',' expected. tests/cases/conformance/expressions/unaryOperators/deleteOperator/deleteOperatorInvalidOperations.ts(5,27): error TS1109: Expression expected. tests/cases/conformance/expressions/unaryOperators/deleteOperator/deleteOperatorInvalidOperations.ts(8,23): error TS1109: Expression expected. +tests/cases/conformance/expressions/unaryOperators/deleteOperator/deleteOperatorInvalidOperations.ts(13,16): error TS1102: 'delete' cannot be called on an identifier in strict mode. -==== tests/cases/conformance/expressions/unaryOperators/deleteOperator/deleteOperatorInvalidOperations.ts (3 errors) ==== +==== tests/cases/conformance/expressions/unaryOperators/deleteOperator/deleteOperatorInvalidOperations.ts (4 errors) ==== // Unary operator delete var ANY; @@ -23,5 +24,7 @@ tests/cases/conformance/expressions/unaryOperators/deleteOperator/deleteOperator class testADelx { constructor(public s: () => {}) { delete s; //expect error + ~ +!!! error TS1102: 'delete' cannot be called on an identifier in strict mode. } } \ No newline at end of file diff --git a/tests/baselines/reference/downlevelLetConst11.errors.txt b/tests/baselines/reference/downlevelLetConst11.errors.txt index 42449bd3c8a..29932f55c1f 100644 --- a/tests/baselines/reference/downlevelLetConst11.errors.txt +++ b/tests/baselines/reference/downlevelLetConst11.errors.txt @@ -1,8 +1,11 @@ -tests/cases/compiler/downlevelLetConst11.ts(2,4): error TS1123: Variable declaration list cannot be empty. +tests/cases/compiler/downlevelLetConst11.ts(2,1): error TS1212: Identifier expected. 'let' is a reserved word in strict mode +tests/cases/compiler/downlevelLetConst11.ts(2,1): error TS2304: Cannot find name 'let'. -==== tests/cases/compiler/downlevelLetConst11.ts (1 errors) ==== +==== tests/cases/compiler/downlevelLetConst11.ts (2 errors) ==== "use strict"; let - -!!! error TS1123: Variable declaration list cannot be empty. \ No newline at end of file + ~~~ +!!! error TS1212: Identifier expected. 'let' is a reserved word in strict mode + ~~~ +!!! error TS2304: Cannot find name 'let'. \ No newline at end of file diff --git a/tests/baselines/reference/downlevelLetConst11.js b/tests/baselines/reference/downlevelLetConst11.js index 377c7e6a9ed..e9749923d09 100644 --- a/tests/baselines/reference/downlevelLetConst11.js +++ b/tests/baselines/reference/downlevelLetConst11.js @@ -4,4 +4,4 @@ let //// [downlevelLetConst11.js] "use strict"; -var ; +let; diff --git a/tests/baselines/reference/letAsIdentifier.errors.txt b/tests/baselines/reference/letAsIdentifier.errors.txt new file mode 100644 index 00000000000..b4e4db22853 --- /dev/null +++ b/tests/baselines/reference/letAsIdentifier.errors.txt @@ -0,0 +1,15 @@ +tests/cases/compiler/letAsIdentifier.ts(3,5): error TS2300: Duplicate identifier 'a'. +tests/cases/compiler/letAsIdentifier.ts(6,1): error TS2300: Duplicate identifier 'a'. + + +==== tests/cases/compiler/letAsIdentifier.ts (2 errors) ==== + + var let = 10; + var a = 10; + ~ +!!! error TS2300: Duplicate identifier 'a'. + let = 30; + let + a; + ~ +!!! error TS2300: Duplicate identifier 'a'. \ No newline at end of file diff --git a/tests/baselines/reference/letAsIdentifier.js b/tests/baselines/reference/letAsIdentifier.js index ae45b4b491c..05811ce1088 100644 --- a/tests/baselines/reference/letAsIdentifier.js +++ b/tests/baselines/reference/letAsIdentifier.js @@ -10,10 +10,10 @@ a; var let = 10; var a = 10; let = 30; -let; -a; +var a; //// [letAsIdentifier.d.ts] declare var let: number; declare var a: number; +declare let a: any; diff --git a/tests/baselines/reference/letAsIdentifier.symbols b/tests/baselines/reference/letAsIdentifier.symbols deleted file mode 100644 index be5066f5ac7..00000000000 --- a/tests/baselines/reference/letAsIdentifier.symbols +++ /dev/null @@ -1,17 +0,0 @@ -=== tests/cases/compiler/letAsIdentifier.ts === - -var let = 10; ->let : Symbol(let, Decl(letAsIdentifier.ts, 1, 3)) - -var a = 10; ->a : Symbol(a, Decl(letAsIdentifier.ts, 2, 3)) - -let = 30; ->let : Symbol(let, Decl(letAsIdentifier.ts, 1, 3)) - -let ->let : Symbol(let, Decl(letAsIdentifier.ts, 1, 3)) - -a; ->a : Symbol(a, Decl(letAsIdentifier.ts, 2, 3)) - diff --git a/tests/baselines/reference/letAsIdentifier.types b/tests/baselines/reference/letAsIdentifier.types deleted file mode 100644 index 36c190a92e4..00000000000 --- a/tests/baselines/reference/letAsIdentifier.types +++ /dev/null @@ -1,21 +0,0 @@ -=== tests/cases/compiler/letAsIdentifier.ts === - -var let = 10; ->let : number ->10 : number - -var a = 10; ->a : number ->10 : number - -let = 30; ->let = 30 : number ->let : number ->30 : number - -let ->let : number - -a; ->a : number - diff --git a/tests/baselines/reference/letAsIdentifierInStrictMode.errors.txt b/tests/baselines/reference/letAsIdentifierInStrictMode.errors.txt index b59daca008c..42f71669c66 100644 --- a/tests/baselines/reference/letAsIdentifierInStrictMode.errors.txt +++ b/tests/baselines/reference/letAsIdentifierInStrictMode.errors.txt @@ -1,20 +1,20 @@ +tests/cases/compiler/letAsIdentifierInStrictMode.ts(2,5): error TS1212: Identifier expected. 'let' is a reserved word in strict mode tests/cases/compiler/letAsIdentifierInStrictMode.ts(3,5): error TS2300: Duplicate identifier 'a'. -tests/cases/compiler/letAsIdentifierInStrictMode.ts(4,5): error TS1134: Variable declaration expected. -tests/cases/compiler/letAsIdentifierInStrictMode.ts(4,7): error TS1134: Variable declaration expected. +tests/cases/compiler/letAsIdentifierInStrictMode.ts(4,1): error TS1212: Identifier expected. 'let' is a reserved word in strict mode tests/cases/compiler/letAsIdentifierInStrictMode.ts(6,1): error TS2300: Duplicate identifier 'a'. ==== tests/cases/compiler/letAsIdentifierInStrictMode.ts (4 errors) ==== "use strict"; var let = 10; + ~~~ +!!! error TS1212: Identifier expected. 'let' is a reserved word in strict mode var a = 10; ~ !!! error TS2300: Duplicate identifier 'a'. let = 30; - ~ -!!! error TS1134: Variable declaration expected. - ~~ -!!! error TS1134: Variable declaration expected. + ~~~ +!!! error TS1212: Identifier expected. 'let' is a reserved word in strict mode let a; ~ diff --git a/tests/baselines/reference/letAsIdentifierInStrictMode.js b/tests/baselines/reference/letAsIdentifierInStrictMode.js index eb840e1a641..cce0b13cf64 100644 --- a/tests/baselines/reference/letAsIdentifierInStrictMode.js +++ b/tests/baselines/reference/letAsIdentifierInStrictMode.js @@ -10,6 +10,5 @@ a; "use strict"; var let = 10; var a = 10; -var ; -30; +let = 30; var a; diff --git a/tests/cases/unittests/incrementalParser.ts b/tests/cases/unittests/incrementalParser.ts index 93d99615c93..a0b361a87f4 100644 --- a/tests/cases/unittests/incrementalParser.ts +++ b/tests/cases/unittests/incrementalParser.ts @@ -252,11 +252,6 @@ module ts { }); it('Strict mode 1',() => { - // In non-strict mode 'package' means nothing and can be reused. In strict mode though - // we'll have to reparse the nodes (and generate an error for 'package();' - // - // Note: in this test we don't actually add 'use strict'. This is so we can compare - // reuse with/without a strict mode change. var source = "foo1();\r\nfoo1();\r\nfoo1();\r\package();"; var oldText = ScriptSnapshot.fromString(source); @@ -266,23 +261,15 @@ module ts { }); it('Strict mode 2',() => { - // In non-strict mode 'package' means nothing and can be reused. In strict mode though - // we'll have to reparse the nodes (and generate an error for 'package();' var source = "foo1();\r\nfoo1();\r\nfoo1();\r\package();"; var oldText = ScriptSnapshot.fromString(source); var newTextAndChange = withInsert(oldText, 0, "'use strict';\r\n"); - // Note the decreased reuse of nodes compared to 'Strict mode 1' - compareTrees(oldText, newTextAndChange.text, newTextAndChange.textChangeRange, 0); + compareTrees(oldText, newTextAndChange.text, newTextAndChange.textChangeRange, 9); }); it('Strict mode 3',() => { - // In non-strict mode 'package' means nothing and can be reused. In strict mode though - // we'll have to reparse the nodes (and generate an error for 'package();' - // - // Note: in this test we don't actually remove 'use strict'. This is so we can compare - // reuse with/without a strict mode change. var source = "'strict';\r\nfoo1();\r\nfoo1();\r\nfoo1();\r\npackage();"; var index = source.indexOf('f'); @@ -293,16 +280,13 @@ module ts { }); it('Strict mode 4',() => { - // In non-strict mode 'package' means nothing and can be reused. In strict mode though - // we'll have to reparse the nodes (and generate an error for 'package();' var source = "'use strict';\r\nfoo1();\r\nfoo1();\r\nfoo1();\r\npackage();"; var index = source.indexOf('f'); var oldText = ScriptSnapshot.fromString(source); var newTextAndChange = withDelete(oldText, 0, index); - // Note the decreased reuse of nodes compared to testStrictMode3 - compareTrees(oldText, newTextAndChange.text, newTextAndChange.textChangeRange, 0); + compareTrees(oldText, newTextAndChange.text, newTextAndChange.textChangeRange, 9); }); it('Strict mode 5',() => { @@ -312,7 +296,7 @@ module ts { var oldText = ScriptSnapshot.fromString(source); var newTextAndChange = withChange(oldText, index, 6, "strict"); - compareTrees(oldText, newTextAndChange.text, newTextAndChange.textChangeRange, 0); + compareTrees(oldText, newTextAndChange.text, newTextAndChange.textChangeRange, 27); }); it('Strict mode 6',() => { @@ -322,7 +306,7 @@ module ts { var oldText = ScriptSnapshot.fromString(source); var newTextAndChange = withChange(oldText, index, 6, "blahhh"); - compareTrees(oldText, newTextAndChange.text, newTextAndChange.textChangeRange, 0); + compareTrees(oldText, newTextAndChange.text, newTextAndChange.textChangeRange, 27); }); it('Strict mode 7',() => { @@ -492,7 +476,6 @@ module ts { var oldText = ScriptSnapshot.fromString(source); var newTextAndChange = withChange(oldText, index, ": Foo { @@ -555,7 +538,7 @@ module ts { var index = source.length; var newTextAndChange = withInsert(oldText, index, "var x;"); - compareTrees(oldText, newTextAndChange.text, newTextAndChange.textChangeRange, 0); + compareTrees(oldText, newTextAndChange.text, newTextAndChange.textChangeRange, 2); }); it('Delete parameter after comment',() => { @@ -595,7 +578,7 @@ constructor(name) { }\ var index = source.indexOf("100"); var newTextAndChange = withInsert(oldText, index, "'1', "); - compareTrees(oldText, newTextAndChange.text, newTextAndChange.textChangeRange, 5); + compareTrees(oldText, newTextAndChange.text, newTextAndChange.textChangeRange, 7); }); it('Insert declare modifier before module',() => { @@ -718,7 +701,7 @@ module m3 { }\ var oldText = ScriptSnapshot.fromString(source); var newTextAndChange = withChange(oldText, 0, "var v =".length, "class C"); - compareTrees(oldText, newTextAndChange.text, newTextAndChange.textChangeRange, 0); // As specified in ES6 specification, all parts of a ClassDeclaration or a ClassExpression are strict mode code. + compareTrees(oldText, newTextAndChange.text, newTextAndChange.textChangeRange, 4); }); it('Moving methods from object literal to class in strict mode', () => { @@ -736,7 +719,7 @@ module m3 { }\ var oldText = ScriptSnapshot.fromString(source); var newTextAndChange = withChange(oldText, 0, "class".length, "interface"); - compareTrees(oldText, newTextAndChange.text, newTextAndChange.textChangeRange, 0); // As specified in ES6 specification, all parts of a ClassDeclaration or a ClassExpression are strict mode code. + compareTrees(oldText, newTextAndChange.text, newTextAndChange.textChangeRange, 18); }); it('Moving index signatures from class to interface in strict mode', () => { @@ -754,7 +737,7 @@ module m3 { }\ var oldText = ScriptSnapshot.fromString(source); var newTextAndChange = withChange(oldText, 0, "interface".length, "class"); - compareTrees(oldText, newTextAndChange.text, newTextAndChange.textChangeRange, 0); // As specified in ES6 specification, all parts of a ClassDeclaration or a ClassExpression are strict mode code. + compareTrees(oldText, newTextAndChange.text, newTextAndChange.textChangeRange, 18); }); @@ -782,7 +765,7 @@ module m3 { }\ var oldText = ScriptSnapshot.fromString(source); var newTextAndChange = withChange(oldText, 0, "var v =".length, "class C"); - compareTrees(oldText, newTextAndChange.text, newTextAndChange.textChangeRange, 0); // As specified in ES6 specification, all parts of a ClassDeclaration or a ClassExpression are strict mode code. + compareTrees(oldText, newTextAndChange.text, newTextAndChange.textChangeRange, 4); }); From 417cfa5c2cdf1440033ae307527e62c49024ed06 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Mon, 15 Jun 2015 17:48:15 -0700 Subject: [PATCH 09/17] Check namespaces for strict mode. --- src/compiler/binder.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/compiler/binder.ts b/src/compiler/binder.ts index 9fee2b6f64d..2f4c2194371 100644 --- a/src/compiler/binder.ts +++ b/src/compiler/binder.ts @@ -748,7 +748,8 @@ namespace ts { function updateStrictMode(node: Node) { switch (node.kind) { case SyntaxKind.SourceFile: - updateStrictModeStatementList((node).statements); + case SyntaxKind.ModuleBlock: + updateStrictModeStatementList((node).statements); return; case SyntaxKind.Block: if (isFunctionLike(node.parent)) { @@ -757,6 +758,7 @@ namespace ts { return; case SyntaxKind.ClassDeclaration: case SyntaxKind.ClassExpression: + // All classes are automatically in strict mode in ES6. inStrictMode = true; return; } From dcbfa6988a8da79558dbbcaac1a3428add22b26c Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Mon, 15 Jun 2015 18:01:18 -0700 Subject: [PATCH 10/17] Modules are always in strict mode in ES6. --- src/compiler/binder.ts | 6 +++- ...xportNonInitializedVariablesAMD.errors.txt | 5 ++- ...NonInitializedVariablesCommonJS.errors.txt | 5 ++- ...xportNonInitializedVariablesES6.errors.txt | 5 ++- ...rtNonInitializedVariablesSystem.errors.txt | 5 ++- ...xportNonInitializedVariablesUMD.errors.txt | 5 ++- ...rtsWithContextualKeywordNames01.errors.txt | 23 +++++++++++++ ...mportsWithContextualKeywordNames01.symbols | 30 ----------------- ...dImportsWithContextualKeywordNames01.types | 32 ------------------- 9 files changed, 48 insertions(+), 68 deletions(-) create mode 100644 tests/baselines/reference/exportsAndImportsWithContextualKeywordNames01.errors.txt delete mode 100644 tests/baselines/reference/exportsAndImportsWithContextualKeywordNames01.symbols delete mode 100644 tests/baselines/reference/exportsAndImportsWithContextualKeywordNames01.types diff --git a/src/compiler/binder.ts b/src/compiler/binder.ts index 2f4c2194371..54376159784 100644 --- a/src/compiler/binder.ts +++ b/src/compiler/binder.ts @@ -88,7 +88,11 @@ namespace ts { let container: Node; let blockScopeContainer: Node; let lastContainer: Node; - let inStrictMode = false; + + // If this file is an external module, then it is automatically in strict-mode according to + // ES6. If it is not an external module, then we'll determine if it is in strict mode or + // not depending on if we see "use strict" in certain places. + let inStrictMode = !!file.externalModuleIndicator; let symbolCount = 0; let Symbol = objectAllocator.getSymbolConstructor(); diff --git a/tests/baselines/reference/exportNonInitializedVariablesAMD.errors.txt b/tests/baselines/reference/exportNonInitializedVariablesAMD.errors.txt index ae79675d8dd..27679cf6071 100644 --- a/tests/baselines/reference/exportNonInitializedVariablesAMD.errors.txt +++ b/tests/baselines/reference/exportNonInitializedVariablesAMD.errors.txt @@ -1,15 +1,18 @@ tests/cases/conformance/externalModules/exportNonInitializedVariablesAMD.ts(2,4): error TS1123: Variable declaration list cannot be empty. +tests/cases/conformance/externalModules/exportNonInitializedVariablesAMD.ts(3,1): error TS1212: Identifier expected. 'let' is a reserved word in strict mode tests/cases/conformance/externalModules/exportNonInitializedVariablesAMD.ts(3,1): error TS2304: Cannot find name 'let'. tests/cases/conformance/externalModules/exportNonInitializedVariablesAMD.ts(4,6): error TS1123: Variable declaration list cannot be empty. -==== tests/cases/conformance/externalModules/exportNonInitializedVariablesAMD.ts (3 errors) ==== +==== tests/cases/conformance/externalModules/exportNonInitializedVariablesAMD.ts (4 errors) ==== var; !!! error TS1123: Variable declaration list cannot be empty. let; ~~~ +!!! error TS1212: Identifier expected. 'let' is a reserved word in strict mode + ~~~ !!! error TS2304: Cannot find name 'let'. const; diff --git a/tests/baselines/reference/exportNonInitializedVariablesCommonJS.errors.txt b/tests/baselines/reference/exportNonInitializedVariablesCommonJS.errors.txt index 65a18649af3..1b05c756d71 100644 --- a/tests/baselines/reference/exportNonInitializedVariablesCommonJS.errors.txt +++ b/tests/baselines/reference/exportNonInitializedVariablesCommonJS.errors.txt @@ -1,15 +1,18 @@ tests/cases/conformance/externalModules/exportNonInitializedVariablesCommonJS.ts(2,4): error TS1123: Variable declaration list cannot be empty. +tests/cases/conformance/externalModules/exportNonInitializedVariablesCommonJS.ts(3,1): error TS1212: Identifier expected. 'let' is a reserved word in strict mode tests/cases/conformance/externalModules/exportNonInitializedVariablesCommonJS.ts(3,1): error TS2304: Cannot find name 'let'. tests/cases/conformance/externalModules/exportNonInitializedVariablesCommonJS.ts(4,6): error TS1123: Variable declaration list cannot be empty. -==== tests/cases/conformance/externalModules/exportNonInitializedVariablesCommonJS.ts (3 errors) ==== +==== tests/cases/conformance/externalModules/exportNonInitializedVariablesCommonJS.ts (4 errors) ==== var; !!! error TS1123: Variable declaration list cannot be empty. let; ~~~ +!!! error TS1212: Identifier expected. 'let' is a reserved word in strict mode + ~~~ !!! error TS2304: Cannot find name 'let'. const; diff --git a/tests/baselines/reference/exportNonInitializedVariablesES6.errors.txt b/tests/baselines/reference/exportNonInitializedVariablesES6.errors.txt index 905d16b360f..f0ae7a83a1d 100644 --- a/tests/baselines/reference/exportNonInitializedVariablesES6.errors.txt +++ b/tests/baselines/reference/exportNonInitializedVariablesES6.errors.txt @@ -1,15 +1,18 @@ tests/cases/conformance/externalModules/exportNonInitializedVariablesES6.ts(2,4): error TS1123: Variable declaration list cannot be empty. +tests/cases/conformance/externalModules/exportNonInitializedVariablesES6.ts(3,1): error TS1212: Identifier expected. 'let' is a reserved word in strict mode tests/cases/conformance/externalModules/exportNonInitializedVariablesES6.ts(3,1): error TS2304: Cannot find name 'let'. tests/cases/conformance/externalModules/exportNonInitializedVariablesES6.ts(4,6): error TS1123: Variable declaration list cannot be empty. -==== tests/cases/conformance/externalModules/exportNonInitializedVariablesES6.ts (3 errors) ==== +==== tests/cases/conformance/externalModules/exportNonInitializedVariablesES6.ts (4 errors) ==== var; !!! error TS1123: Variable declaration list cannot be empty. let; ~~~ +!!! error TS1212: Identifier expected. 'let' is a reserved word in strict mode + ~~~ !!! error TS2304: Cannot find name 'let'. const; diff --git a/tests/baselines/reference/exportNonInitializedVariablesSystem.errors.txt b/tests/baselines/reference/exportNonInitializedVariablesSystem.errors.txt index d7aeb5d2ac0..55249c36c75 100644 --- a/tests/baselines/reference/exportNonInitializedVariablesSystem.errors.txt +++ b/tests/baselines/reference/exportNonInitializedVariablesSystem.errors.txt @@ -1,15 +1,18 @@ tests/cases/conformance/externalModules/exportNonInitializedVariablesSystem.ts(2,4): error TS1123: Variable declaration list cannot be empty. +tests/cases/conformance/externalModules/exportNonInitializedVariablesSystem.ts(3,1): error TS1212: Identifier expected. 'let' is a reserved word in strict mode tests/cases/conformance/externalModules/exportNonInitializedVariablesSystem.ts(3,1): error TS2304: Cannot find name 'let'. tests/cases/conformance/externalModules/exportNonInitializedVariablesSystem.ts(4,6): error TS1123: Variable declaration list cannot be empty. -==== tests/cases/conformance/externalModules/exportNonInitializedVariablesSystem.ts (3 errors) ==== +==== tests/cases/conformance/externalModules/exportNonInitializedVariablesSystem.ts (4 errors) ==== var; !!! error TS1123: Variable declaration list cannot be empty. let; ~~~ +!!! error TS1212: Identifier expected. 'let' is a reserved word in strict mode + ~~~ !!! error TS2304: Cannot find name 'let'. const; diff --git a/tests/baselines/reference/exportNonInitializedVariablesUMD.errors.txt b/tests/baselines/reference/exportNonInitializedVariablesUMD.errors.txt index eaf68e67055..b21d9a89715 100644 --- a/tests/baselines/reference/exportNonInitializedVariablesUMD.errors.txt +++ b/tests/baselines/reference/exportNonInitializedVariablesUMD.errors.txt @@ -1,15 +1,18 @@ tests/cases/conformance/externalModules/exportNonInitializedVariablesUMD.ts(2,4): error TS1123: Variable declaration list cannot be empty. +tests/cases/conformance/externalModules/exportNonInitializedVariablesUMD.ts(3,1): error TS1212: Identifier expected. 'let' is a reserved word in strict mode tests/cases/conformance/externalModules/exportNonInitializedVariablesUMD.ts(3,1): error TS2304: Cannot find name 'let'. tests/cases/conformance/externalModules/exportNonInitializedVariablesUMD.ts(4,6): error TS1123: Variable declaration list cannot be empty. -==== tests/cases/conformance/externalModules/exportNonInitializedVariablesUMD.ts (3 errors) ==== +==== tests/cases/conformance/externalModules/exportNonInitializedVariablesUMD.ts (4 errors) ==== var; !!! error TS1123: Variable declaration list cannot be empty. let; ~~~ +!!! error TS1212: Identifier expected. 'let' is a reserved word in strict mode + ~~~ !!! error TS2304: Cannot find name 'let'. const; diff --git a/tests/baselines/reference/exportsAndImportsWithContextualKeywordNames01.errors.txt b/tests/baselines/reference/exportsAndImportsWithContextualKeywordNames01.errors.txt new file mode 100644 index 00000000000..94d216724a5 --- /dev/null +++ b/tests/baselines/reference/exportsAndImportsWithContextualKeywordNames01.errors.txt @@ -0,0 +1,23 @@ +tests/cases/conformance/es6/modules/t3.ts(1,17): error TS1212: Identifier expected. 'yield' is a reserved word in strict mode + + +==== tests/cases/conformance/es6/modules/t1.ts (0 errors) ==== + + let set = { + set foo(x: number) { + } + } + let get = 10; + + export { set, get }; + +==== tests/cases/conformance/es6/modules/t2.ts (0 errors) ==== + import * as set from "./t1"; + +==== tests/cases/conformance/es6/modules/t3.ts (1 errors) ==== + import { set as yield } from "./t1"; + ~~~~~ +!!! error TS1212: Identifier expected. 'yield' is a reserved word in strict mode + +==== tests/cases/conformance/es6/modules/t4.ts (0 errors) ==== + import { get } from "./t1"; \ No newline at end of file diff --git a/tests/baselines/reference/exportsAndImportsWithContextualKeywordNames01.symbols b/tests/baselines/reference/exportsAndImportsWithContextualKeywordNames01.symbols deleted file mode 100644 index f6695a9cf37..00000000000 --- a/tests/baselines/reference/exportsAndImportsWithContextualKeywordNames01.symbols +++ /dev/null @@ -1,30 +0,0 @@ -=== tests/cases/conformance/es6/modules/t1.ts === - -let set = { ->set : Symbol(set, Decl(t1.ts, 1, 3)) - - set foo(x: number) { ->foo : Symbol(foo, Decl(t1.ts, 1, 11)) ->x : Symbol(x, Decl(t1.ts, 2, 12)) - } -} -let get = 10; ->get : Symbol(get, Decl(t1.ts, 5, 3)) - -export { set, get }; ->set : Symbol(set, Decl(t1.ts, 7, 8)) ->get : Symbol(get, Decl(t1.ts, 7, 13)) - -=== tests/cases/conformance/es6/modules/t2.ts === -import * as set from "./t1"; ->set : Symbol(set, Decl(t2.ts, 0, 6)) - -=== tests/cases/conformance/es6/modules/t3.ts === -import { set as yield } from "./t1"; ->set : Symbol(yield, Decl(t3.ts, 0, 8)) ->yield : Symbol(yield, Decl(t3.ts, 0, 8)) - -=== tests/cases/conformance/es6/modules/t4.ts === -import { get } from "./t1"; ->get : Symbol(get, Decl(t4.ts, 0, 8)) - diff --git a/tests/baselines/reference/exportsAndImportsWithContextualKeywordNames01.types b/tests/baselines/reference/exportsAndImportsWithContextualKeywordNames01.types deleted file mode 100644 index a687787c462..00000000000 --- a/tests/baselines/reference/exportsAndImportsWithContextualKeywordNames01.types +++ /dev/null @@ -1,32 +0,0 @@ -=== tests/cases/conformance/es6/modules/t1.ts === - -let set = { ->set : { foo: number; } ->{ set foo(x: number) { }} : { foo: number; } - - set foo(x: number) { ->foo : number ->x : number - } -} -let get = 10; ->get : number ->10 : number - -export { set, get }; ->set : { foo: number; } ->get : number - -=== tests/cases/conformance/es6/modules/t2.ts === -import * as set from "./t1"; ->set : typeof set - -=== tests/cases/conformance/es6/modules/t3.ts === -import { set as yield } from "./t1"; ->set : { foo: number; } ->yield : { foo: number; } - -=== tests/cases/conformance/es6/modules/t4.ts === -import { get } from "./t1"; ->get : number - From d558e42d948b0de1722e7f2f76d20b3ef59bb41f Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Mon, 15 Jun 2015 18:20:44 -0700 Subject: [PATCH 11/17] External modules are always in strict mode in ES6 --- src/compiler/binder.ts | 56 +++++++++++++------ .../diagnosticInformationMap.generated.ts | 2 + src/compiler/diagnosticMessages.json | 8 +++ ...xportNonInitializedVariablesAMD.errors.txt | 4 +- ...NonInitializedVariablesCommonJS.errors.txt | 4 +- ...xportNonInitializedVariablesES6.errors.txt | 4 +- ...rtNonInitializedVariablesSystem.errors.txt | 4 +- ...xportNonInitializedVariablesUMD.errors.txt | 4 +- ...rtsWithContextualKeywordNames01.errors.txt | 4 +- ...vedWordInImportEqualDeclaration.errors.txt | 4 +- ...rictModeWordInImportDeclaration.errors.txt | 12 ++-- 11 files changed, 70 insertions(+), 36 deletions(-) diff --git a/src/compiler/binder.ts b/src/compiler/binder.ts index 54376159784..30a7b9cbde2 100644 --- a/src/compiler/binder.ts +++ b/src/compiler/binder.ts @@ -618,19 +618,31 @@ namespace ts { // Report error only if there are no parse errors in file if (!file.parseDiagnostics.length) { - let message = getAncestor(node, SyntaxKind.ClassDeclaration) || getAncestor(node, SyntaxKind.ClassExpression) ? - Diagnostics.Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_strict_mode : - Diagnostics.Identifier_expected_0_is_a_reserved_word_in_strict_mode; - file.bindDiagnostics.push(createDiagnosticForNode(node, message, declarationNameToString(node))); + file.bindDiagnostics.push(createDiagnosticForNode(node, + getStrictModeIdentifierMessage(node), declarationNameToString(node))); } } } + function getStrictModeIdentifierMessage(node: Node) { + // Provide specialized messages to help the user understand why we think they're in + // strict mode. + if (getAncestor(node, SyntaxKind.ClassDeclaration) || getAncestor(node, SyntaxKind.ClassExpression)) { + return Diagnostics.Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_strict_mode; + } + + if (file.externalModuleIndicator) { + return Diagnostics.Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode; + } + + return Diagnostics.Identifier_expected_0_is_a_reserved_word_in_strict_mode; + } + function checkStrictModeBinaryExpression(node: BinaryExpression) { if (inStrictMode && isLeftHandSideExpression(node.left) && isAssignmentOperator(node.operatorToken.kind)) { // ECMA 262 (Annex C) The identifier eval or arguments may not appear as the LeftHandSideExpression of an // Assignment operator(11.13) or of a PostfixExpression(11.3) - checkGrammarEvalOrArgumentsInStrictMode(node, node.left); + checkStrictModeEvalOrArguments(node, node.left); } } @@ -638,7 +650,7 @@ namespace ts { // It is a SyntaxError if a TryStatement with a Catch occurs within strict code and the Identifier of the // Catch production is eval or arguments if (inStrictMode && node.variableDeclaration) { - checkGrammarEvalOrArgumentsInStrictMode(node, node.variableDeclaration.name); + checkStrictModeEvalOrArguments(node, node.variableDeclaration.name); } } @@ -657,25 +669,37 @@ namespace ts { ((node).text === "eval" || (node).text === "arguments"); } - function checkGrammarEvalOrArgumentsInStrictMode(contextNode: Node, name: Node) { + function checkStrictModeEvalOrArguments(contextNode: Node, name: Node) { if (name && name.kind === SyntaxKind.Identifier) { let identifier = name; if (isEvalOrArgumentsIdentifier(identifier)) { // We check first if the name is inside class declaration or class expression; if so give explicit message // otherwise report generic error message. let span = getErrorSpanForNode(file, name); - let message = getAncestor(identifier, SyntaxKind.ClassDeclaration) || getAncestor(identifier, SyntaxKind.ClassExpression) ? - Diagnostics.Invalid_use_of_0_Class_definitions_are_automatically_in_strict_mode : - Diagnostics.Invalid_use_of_0_in_strict_mode; - file.bindDiagnostics.push(createFileDiagnostic(file, span.start, span.length, message, identifier.text)); + file.bindDiagnostics.push(createFileDiagnostic(file, span.start, span.length, + getStrictModeEvalOrArgumentsMessage(contextNode), identifier.text)); } } } + function getStrictModeEvalOrArgumentsMessage(node: Node) { + // Provide specialized messages to help the user understand why we think they're in + // strict mode. + if (getAncestor(node, SyntaxKind.ClassDeclaration) || getAncestor(node, SyntaxKind.ClassExpression)) { + return Diagnostics.Invalid_use_of_0_Class_definitions_are_automatically_in_strict_mode; + } + + if (file.externalModuleIndicator) { + return Diagnostics.Invalid_use_of_0_Modules_are_automatically_in_strict_mode; + } + + return Diagnostics.Invalid_use_of_0_in_strict_mode; + } + function checkStrictModeFunctionName(node: FunctionLikeDeclaration) { if (inStrictMode) { // It is a SyntaxError if the identifier eval or arguments appears within a FormalParameterList of a strict mode FunctionDeclaration or FunctionExpression (13.1)) - checkGrammarEvalOrArgumentsInStrictMode(node, node.name); + checkStrictModeEvalOrArguments(node, node.name); } } @@ -691,7 +715,7 @@ namespace ts { // Assignment operator(11.13) or of a PostfixExpression(11.3) or as the UnaryExpression // operated upon by a Prefix Increment(11.4.4) or a Prefix Decrement(11.4.5) operator. if (inStrictMode) { - checkGrammarEvalOrArgumentsInStrictMode(node, node.operand); + checkStrictModeEvalOrArguments(node, node.operand); } } @@ -699,7 +723,7 @@ namespace ts { // Grammar checking if (inStrictMode) { if (node.operator === SyntaxKind.PlusPlusToken || node.operator === SyntaxKind.MinusMinusToken) { - checkGrammarEvalOrArgumentsInStrictMode(node, node.operand); + checkStrictModeEvalOrArguments(node, node.operand); } } } @@ -962,7 +986,7 @@ namespace ts { function bindVariableDeclarationOrBindingElement(node: VariableDeclaration | BindingElement) { if (inStrictMode) { - checkGrammarEvalOrArgumentsInStrictMode(node, node.name) + checkStrictModeEvalOrArguments(node, node.name) } if (!isBindingPattern(node.name)) { @@ -991,7 +1015,7 @@ namespace ts { if (inStrictMode) { // It is a SyntaxError if the identifier eval or arguments appears within a FormalParameterList of a // strict mode FunctionLikeDeclaration or FunctionExpression(13.1) - checkGrammarEvalOrArgumentsInStrictMode(node, node.name); + checkStrictModeEvalOrArguments(node, node.name); } if (isBindingPattern(node.name)) { diff --git a/src/compiler/diagnosticInformationMap.generated.ts b/src/compiler/diagnosticInformationMap.generated.ts index de5e0f552d5..f6fd2a60f56 100644 --- a/src/compiler/diagnosticInformationMap.generated.ts +++ b/src/compiler/diagnosticInformationMap.generated.ts @@ -171,6 +171,8 @@ namespace ts { A_class_declaration_without_the_default_modifier_must_have_a_name: { code: 1211, category: DiagnosticCategory.Error, key: "A class declaration without the 'default' modifier must have a name" }, Identifier_expected_0_is_a_reserved_word_in_strict_mode: { code: 1212, category: DiagnosticCategory.Error, key: "Identifier expected. '{0}' is a reserved word in strict mode" }, Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_strict_mode: { code: 1213, category: DiagnosticCategory.Error, key: "Identifier expected. '{0}' is a reserved word in strict mode. Class definitions are automatically in strict mode." }, + Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode: { code: 1214, category: DiagnosticCategory.Error, key: "Identifier expected. '{0}' is a reserved word in strict mode. Modules are automatically in strict mode." }, + Invalid_use_of_0_Modules_are_automatically_in_strict_mode: { code: 1215, category: DiagnosticCategory.Error, key: "Invalid use of '{0}'. Modules are automatically in strict mode." }, Export_assignment_is_not_supported_when_module_flag_is_system: { code: 1218, category: DiagnosticCategory.Error, key: "Export assignment is not supported when '--module' flag is 'system'." }, Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Specify_experimentalDecorators_to_remove_this_warning: { code: 1219, category: DiagnosticCategory.Error, key: "Experimental support for decorators is a feature that is subject to change in a future release. Specify '--experimentalDecorators' to remove this warning." }, Generators_are_only_available_when_targeting_ECMAScript_6_or_higher: { code: 1220, category: DiagnosticCategory.Error, key: "Generators are only available when targeting ECMAScript 6 or higher." }, diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index c4a805413e7..cf25e77bf66 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -671,6 +671,14 @@ "category": "Error", "code": 1213 }, + "Identifier expected. '{0}' is a reserved word in strict mode. Modules are automatically in strict mode.": { + "category": "Error", + "code": 1214 + }, + "Invalid use of '{0}'. Modules are automatically in strict mode.": { + "category": "Error", + "code": 1215 + }, "Export assignment is not supported when '--module' flag is 'system'.": { "category": "Error", "code": 1218 diff --git a/tests/baselines/reference/exportNonInitializedVariablesAMD.errors.txt b/tests/baselines/reference/exportNonInitializedVariablesAMD.errors.txt index 27679cf6071..28d7253a70c 100644 --- a/tests/baselines/reference/exportNonInitializedVariablesAMD.errors.txt +++ b/tests/baselines/reference/exportNonInitializedVariablesAMD.errors.txt @@ -1,5 +1,5 @@ tests/cases/conformance/externalModules/exportNonInitializedVariablesAMD.ts(2,4): error TS1123: Variable declaration list cannot be empty. -tests/cases/conformance/externalModules/exportNonInitializedVariablesAMD.ts(3,1): error TS1212: Identifier expected. 'let' is a reserved word in strict mode +tests/cases/conformance/externalModules/exportNonInitializedVariablesAMD.ts(3,1): error TS1214: Identifier expected. 'let' is a reserved word in strict mode. Modules are automatically in strict mode. tests/cases/conformance/externalModules/exportNonInitializedVariablesAMD.ts(3,1): error TS2304: Cannot find name 'let'. tests/cases/conformance/externalModules/exportNonInitializedVariablesAMD.ts(4,6): error TS1123: Variable declaration list cannot be empty. @@ -11,7 +11,7 @@ tests/cases/conformance/externalModules/exportNonInitializedVariablesAMD.ts(4,6) !!! error TS1123: Variable declaration list cannot be empty. let; ~~~ -!!! error TS1212: Identifier expected. 'let' is a reserved word in strict mode +!!! error TS1214: Identifier expected. 'let' is a reserved word in strict mode. Modules are automatically in strict mode. ~~~ !!! error TS2304: Cannot find name 'let'. const; diff --git a/tests/baselines/reference/exportNonInitializedVariablesCommonJS.errors.txt b/tests/baselines/reference/exportNonInitializedVariablesCommonJS.errors.txt index 1b05c756d71..84d4cab9c83 100644 --- a/tests/baselines/reference/exportNonInitializedVariablesCommonJS.errors.txt +++ b/tests/baselines/reference/exportNonInitializedVariablesCommonJS.errors.txt @@ -1,5 +1,5 @@ tests/cases/conformance/externalModules/exportNonInitializedVariablesCommonJS.ts(2,4): error TS1123: Variable declaration list cannot be empty. -tests/cases/conformance/externalModules/exportNonInitializedVariablesCommonJS.ts(3,1): error TS1212: Identifier expected. 'let' is a reserved word in strict mode +tests/cases/conformance/externalModules/exportNonInitializedVariablesCommonJS.ts(3,1): error TS1214: Identifier expected. 'let' is a reserved word in strict mode. Modules are automatically in strict mode. tests/cases/conformance/externalModules/exportNonInitializedVariablesCommonJS.ts(3,1): error TS2304: Cannot find name 'let'. tests/cases/conformance/externalModules/exportNonInitializedVariablesCommonJS.ts(4,6): error TS1123: Variable declaration list cannot be empty. @@ -11,7 +11,7 @@ tests/cases/conformance/externalModules/exportNonInitializedVariablesCommonJS.ts !!! error TS1123: Variable declaration list cannot be empty. let; ~~~ -!!! error TS1212: Identifier expected. 'let' is a reserved word in strict mode +!!! error TS1214: Identifier expected. 'let' is a reserved word in strict mode. Modules are automatically in strict mode. ~~~ !!! error TS2304: Cannot find name 'let'. const; diff --git a/tests/baselines/reference/exportNonInitializedVariablesES6.errors.txt b/tests/baselines/reference/exportNonInitializedVariablesES6.errors.txt index f0ae7a83a1d..08e1d9588b6 100644 --- a/tests/baselines/reference/exportNonInitializedVariablesES6.errors.txt +++ b/tests/baselines/reference/exportNonInitializedVariablesES6.errors.txt @@ -1,5 +1,5 @@ tests/cases/conformance/externalModules/exportNonInitializedVariablesES6.ts(2,4): error TS1123: Variable declaration list cannot be empty. -tests/cases/conformance/externalModules/exportNonInitializedVariablesES6.ts(3,1): error TS1212: Identifier expected. 'let' is a reserved word in strict mode +tests/cases/conformance/externalModules/exportNonInitializedVariablesES6.ts(3,1): error TS1214: Identifier expected. 'let' is a reserved word in strict mode. Modules are automatically in strict mode. tests/cases/conformance/externalModules/exportNonInitializedVariablesES6.ts(3,1): error TS2304: Cannot find name 'let'. tests/cases/conformance/externalModules/exportNonInitializedVariablesES6.ts(4,6): error TS1123: Variable declaration list cannot be empty. @@ -11,7 +11,7 @@ tests/cases/conformance/externalModules/exportNonInitializedVariablesES6.ts(4,6) !!! error TS1123: Variable declaration list cannot be empty. let; ~~~ -!!! error TS1212: Identifier expected. 'let' is a reserved word in strict mode +!!! error TS1214: Identifier expected. 'let' is a reserved word in strict mode. Modules are automatically in strict mode. ~~~ !!! error TS2304: Cannot find name 'let'. const; diff --git a/tests/baselines/reference/exportNonInitializedVariablesSystem.errors.txt b/tests/baselines/reference/exportNonInitializedVariablesSystem.errors.txt index 55249c36c75..1e461ea7253 100644 --- a/tests/baselines/reference/exportNonInitializedVariablesSystem.errors.txt +++ b/tests/baselines/reference/exportNonInitializedVariablesSystem.errors.txt @@ -1,5 +1,5 @@ tests/cases/conformance/externalModules/exportNonInitializedVariablesSystem.ts(2,4): error TS1123: Variable declaration list cannot be empty. -tests/cases/conformance/externalModules/exportNonInitializedVariablesSystem.ts(3,1): error TS1212: Identifier expected. 'let' is a reserved word in strict mode +tests/cases/conformance/externalModules/exportNonInitializedVariablesSystem.ts(3,1): error TS1214: Identifier expected. 'let' is a reserved word in strict mode. Modules are automatically in strict mode. tests/cases/conformance/externalModules/exportNonInitializedVariablesSystem.ts(3,1): error TS2304: Cannot find name 'let'. tests/cases/conformance/externalModules/exportNonInitializedVariablesSystem.ts(4,6): error TS1123: Variable declaration list cannot be empty. @@ -11,7 +11,7 @@ tests/cases/conformance/externalModules/exportNonInitializedVariablesSystem.ts(4 !!! error TS1123: Variable declaration list cannot be empty. let; ~~~ -!!! error TS1212: Identifier expected. 'let' is a reserved word in strict mode +!!! error TS1214: Identifier expected. 'let' is a reserved word in strict mode. Modules are automatically in strict mode. ~~~ !!! error TS2304: Cannot find name 'let'. const; diff --git a/tests/baselines/reference/exportNonInitializedVariablesUMD.errors.txt b/tests/baselines/reference/exportNonInitializedVariablesUMD.errors.txt index b21d9a89715..b180c138501 100644 --- a/tests/baselines/reference/exportNonInitializedVariablesUMD.errors.txt +++ b/tests/baselines/reference/exportNonInitializedVariablesUMD.errors.txt @@ -1,5 +1,5 @@ tests/cases/conformance/externalModules/exportNonInitializedVariablesUMD.ts(2,4): error TS1123: Variable declaration list cannot be empty. -tests/cases/conformance/externalModules/exportNonInitializedVariablesUMD.ts(3,1): error TS1212: Identifier expected. 'let' is a reserved word in strict mode +tests/cases/conformance/externalModules/exportNonInitializedVariablesUMD.ts(3,1): error TS1214: Identifier expected. 'let' is a reserved word in strict mode. Modules are automatically in strict mode. tests/cases/conformance/externalModules/exportNonInitializedVariablesUMD.ts(3,1): error TS2304: Cannot find name 'let'. tests/cases/conformance/externalModules/exportNonInitializedVariablesUMD.ts(4,6): error TS1123: Variable declaration list cannot be empty. @@ -11,7 +11,7 @@ tests/cases/conformance/externalModules/exportNonInitializedVariablesUMD.ts(4,6) !!! error TS1123: Variable declaration list cannot be empty. let; ~~~ -!!! error TS1212: Identifier expected. 'let' is a reserved word in strict mode +!!! error TS1214: Identifier expected. 'let' is a reserved word in strict mode. Modules are automatically in strict mode. ~~~ !!! error TS2304: Cannot find name 'let'. const; diff --git a/tests/baselines/reference/exportsAndImportsWithContextualKeywordNames01.errors.txt b/tests/baselines/reference/exportsAndImportsWithContextualKeywordNames01.errors.txt index 94d216724a5..6d443464d99 100644 --- a/tests/baselines/reference/exportsAndImportsWithContextualKeywordNames01.errors.txt +++ b/tests/baselines/reference/exportsAndImportsWithContextualKeywordNames01.errors.txt @@ -1,4 +1,4 @@ -tests/cases/conformance/es6/modules/t3.ts(1,17): error TS1212: Identifier expected. 'yield' is a reserved word in strict mode +tests/cases/conformance/es6/modules/t3.ts(1,17): error TS1214: Identifier expected. 'yield' is a reserved word in strict mode. Modules are automatically in strict mode. ==== tests/cases/conformance/es6/modules/t1.ts (0 errors) ==== @@ -17,7 +17,7 @@ tests/cases/conformance/es6/modules/t3.ts(1,17): error TS1212: Identifier expect ==== tests/cases/conformance/es6/modules/t3.ts (1 errors) ==== import { set as yield } from "./t1"; ~~~~~ -!!! error TS1212: Identifier expected. 'yield' is a reserved word in strict mode +!!! error TS1214: Identifier expected. 'yield' is a reserved word in strict mode. Modules are automatically in strict mode. ==== tests/cases/conformance/es6/modules/t4.ts (0 errors) ==== import { get } from "./t1"; \ No newline at end of file diff --git a/tests/baselines/reference/strictModeReservedWordInImportEqualDeclaration.errors.txt b/tests/baselines/reference/strictModeReservedWordInImportEqualDeclaration.errors.txt index 7511e88f53a..3405db573a9 100644 --- a/tests/baselines/reference/strictModeReservedWordInImportEqualDeclaration.errors.txt +++ b/tests/baselines/reference/strictModeReservedWordInImportEqualDeclaration.errors.txt @@ -1,4 +1,4 @@ -tests/cases/compiler/strictModeReservedWordInImportEqualDeclaration.ts(3,8): error TS1212: Identifier expected. 'public' is a reserved word in strict mode +tests/cases/compiler/strictModeReservedWordInImportEqualDeclaration.ts(3,8): error TS1214: Identifier expected. 'public' is a reserved word in strict mode. Modules are automatically in strict mode. tests/cases/compiler/strictModeReservedWordInImportEqualDeclaration.ts(3,25): error TS2307: Cannot find module '1'. @@ -7,6 +7,6 @@ tests/cases/compiler/strictModeReservedWordInImportEqualDeclaration.ts(3,25): er "use strict" import public = require("1"); ~~~~~~ -!!! error TS1212: Identifier expected. 'public' is a reserved word in strict mode +!!! error TS1214: Identifier expected. 'public' is a reserved word in strict mode. Modules are automatically in strict mode. ~~~ !!! error TS2307: Cannot find module '1'. \ No newline at end of file diff --git a/tests/baselines/reference/strictModeWordInImportDeclaration.errors.txt b/tests/baselines/reference/strictModeWordInImportDeclaration.errors.txt index aed48e1d3fd..b6e20cfc188 100644 --- a/tests/baselines/reference/strictModeWordInImportDeclaration.errors.txt +++ b/tests/baselines/reference/strictModeWordInImportDeclaration.errors.txt @@ -1,8 +1,8 @@ -tests/cases/compiler/strictModeWordInImportDeclaration.ts(2,13): error TS1212: Identifier expected. 'package' is a reserved word in strict mode +tests/cases/compiler/strictModeWordInImportDeclaration.ts(2,13): error TS1214: Identifier expected. 'package' is a reserved word in strict mode. Modules are automatically in strict mode. tests/cases/compiler/strictModeWordInImportDeclaration.ts(2,26): error TS2307: Cannot find module './1'. -tests/cases/compiler/strictModeWordInImportDeclaration.ts(3,16): error TS1212: Identifier expected. 'private' is a reserved word in strict mode +tests/cases/compiler/strictModeWordInImportDeclaration.ts(3,16): error TS1214: Identifier expected. 'private' is a reserved word in strict mode. Modules are automatically in strict mode. tests/cases/compiler/strictModeWordInImportDeclaration.ts(3,30): error TS2307: Cannot find module './1'. -tests/cases/compiler/strictModeWordInImportDeclaration.ts(4,8): error TS1212: Identifier expected. 'public' is a reserved word in strict mode +tests/cases/compiler/strictModeWordInImportDeclaration.ts(4,8): error TS1214: Identifier expected. 'public' is a reserved word in strict mode. Modules are automatically in strict mode. tests/cases/compiler/strictModeWordInImportDeclaration.ts(4,20): error TS2307: Cannot find module './1'. @@ -10,16 +10,16 @@ tests/cases/compiler/strictModeWordInImportDeclaration.ts(4,20): error TS2307: C "use strict" import * as package from "./1" ~~~~~~~ -!!! error TS1212: Identifier expected. 'package' is a reserved word in strict mode +!!! error TS1214: Identifier expected. 'package' is a reserved word in strict mode. Modules are automatically in strict mode. ~~~~~ !!! error TS2307: Cannot find module './1'. import {foo as private} from "./1" ~~~~~~~ -!!! error TS1212: Identifier expected. 'private' is a reserved word in strict mode +!!! error TS1214: Identifier expected. 'private' is a reserved word in strict mode. Modules are automatically in strict mode. ~~~~~ !!! error TS2307: Cannot find module './1'. import public from "./1" ~~~~~~ -!!! error TS1212: Identifier expected. 'public' is a reserved word in strict mode +!!! error TS1214: Identifier expected. 'public' is a reserved word in strict mode. Modules are automatically in strict mode. ~~~~~ !!! error TS2307: Cannot find module './1'. \ No newline at end of file From 300089ce2dcf7847bfc6baf9f6d98d09f835ce3a Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Mon, 15 Jun 2015 23:31:40 -0700 Subject: [PATCH 12/17] PR feedback. --- src/compiler/binder.ts | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/src/compiler/binder.ts b/src/compiler/binder.ts index 30a7b9cbde2..eaad8593eee 100644 --- a/src/compiler/binder.ts +++ b/src/compiler/binder.ts @@ -91,7 +91,7 @@ namespace ts { // If this file is an external module, then it is automatically in strict-mode according to // ES6. If it is not an external module, then we'll determine if it is in strict mode or - // not depending on if we see "use strict" in certain places. + // not depending on if we see "use strict" in certain places (or if we hit a class/namespace). let inStrictMode = !!file.externalModuleIndicator; let symbolCount = 0; @@ -538,10 +538,13 @@ namespace ts { } function bindObjectLiteralExpression(node: ObjectLiteralExpression) { + const enum ElementKind { + Property = 1, + Accessor = 2 + } + if (inStrictMode) { - let seen: Map = {}; - const Property = 1; - const NonProperty = 2; + let seen: Map = {}; for (let prop of node.properties) { if (prop.name.kind !== SyntaxKind.Identifier) { @@ -559,8 +562,8 @@ namespace ts { // d.IsAccessorDescriptor(previous) is true and IsAccessorDescriptor(propId.descriptor) is true // and either both previous and propId.descriptor have[[Get]] fields or both previous and propId.descriptor have[[Set]] fields let currentKind = prop.kind === SyntaxKind.PropertyAssignment || prop.kind === SyntaxKind.ShorthandPropertyAssignment || prop.kind === SyntaxKind.MethodDeclaration - ? Property - : NonProperty; + ? ElementKind.Property + : ElementKind.Accessor; let existingKind = seen[identifier.text]; if (!existingKind) { @@ -568,7 +571,7 @@ namespace ts { continue; } - if (currentKind === Property && existingKind === Property) { + if (currentKind === ElementKind.Property && existingKind === ElementKind.Property) { let span = getErrorSpanForNode(file, identifier); file.bindDiagnostics.push(createFileDiagnostic(file, span.start, span.length, Diagnostics.An_object_literal_cannot_have_multiple_properties_with_the_same_name_in_strict_mode)); @@ -798,7 +801,7 @@ namespace ts { return; } - if (isUseStrictPrologueDirective(statement)) { + if (isUseStrictPrologueDirective(statement)) { inStrictMode = true; return; } @@ -806,9 +809,8 @@ namespace ts { } /// Should be called only on prologue directives (isPrologueDirective(node) should be true) - function isUseStrictPrologueDirective(node: Node): boolean { - Debug.assert(isPrologueDirective(node)); - let nodeText = getTextOfNodeFromSourceText(file.text, (node).expression); + function isUseStrictPrologueDirective(node: ExpressionStatement): boolean { + let nodeText = getTextOfNodeFromSourceText(file.text, node.expression); // Note: the node text must be exactly "use strict" or 'use strict'. It is not ok for the // string to contain unicode escapes (as per ES5). @@ -838,9 +840,9 @@ namespace ts { return declareSymbolAndAddToSymbolTable(node, SymbolFlags.TypeParameter, SymbolFlags.TypeParameterExcludes); case SyntaxKind.Parameter: return bindParameter(node); - case SyntaxKind.BindingElement: case SyntaxKind.VariableDeclaration: - return bindVariableDeclarationOrBindingElement(node); + case SyntaxKind.BindingElement: + return bindVariableDeclarationOrBindingElement(node); case SyntaxKind.PropertyDeclaration: case SyntaxKind.PropertySignature: return bindPropertyOrMethodOrAccessor(node, SymbolFlags.Property | ((node).questionToken ? SymbolFlags.Optional : SymbolFlags.None), SymbolFlags.PropertyExcludes); From e305de140318f245d91edc1d31bb5587afa1ed35 Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Tue, 16 Jun 2015 06:54:10 -0700 Subject: [PATCH 13/17] Workaround to match previous type writer output --- src/compiler/checker.ts | 10 ++++++---- src/harness/typeWriter.ts | 5 ++++- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 8395fc04626..8ad4061ddf7 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -12002,10 +12002,6 @@ module ts { return unknownType; } - if (isClassExtendsExpressionWithTypeArguments(node)) { - return getBaseTypes(getDeclaredTypeOfSymbol(getSymbolOfNode(node.parent.parent)))[0]; - } - if (isTypeNode(node)) { return getTypeFromTypeNode(node); } @@ -12014,6 +12010,12 @@ module ts { return getTypeOfExpression(node); } + if (isClassExtendsExpressionWithTypeArguments(node)) { + // A SyntaxKind.ExpressionWithTypeArguments is considered a type node, except when it occurs in the + // extends clause of a class. We handle that case here. + return getBaseTypes(getDeclaredTypeOfSymbol(getSymbolOfNode(node.parent.parent)))[0]; + } + if (isTypeDeclaration(node)) { // In this case, we call getSymbolOfNode instead of getSymbolInfo because it is a declaration let symbol = getSymbolOfNode(node); diff --git a/src/harness/typeWriter.ts b/src/harness/typeWriter.ts index 533f90a2d83..ac695fc23a4 100644 --- a/src/harness/typeWriter.ts +++ b/src/harness/typeWriter.ts @@ -41,7 +41,10 @@ class TypeWriterWalker { var lineAndCharacter = this.currentSourceFile.getLineAndCharacterOfPosition(actualPos); var sourceText = ts.getTextOfNodeFromSourceText(this.currentSourceFile.text, node); - var type = this.checker.getTypeAtLocation(node); + // Workaround to ensure we output 'C' instead of 'typeof C' for base class expressions + // var type = this.checker.getTypeAtLocation(node); + var type = node.parent && ts.isClassExtendsExpressionWithTypeArguments(node.parent) && this.checker.getTypeAtLocation(node.parent) || this.checker.getTypeAtLocation(node); + ts.Debug.assert(type !== undefined, "type doesn't exist"); var symbol = this.checker.getSymbolAtLocation(node); From d09d61f75763ec89b6a36b398850200482fd9523 Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Tue, 16 Jun 2015 06:55:52 -0700 Subject: [PATCH 14/17] Accepting new baselines --- ...assHeritageListMemberTypeAnnotations.types | 2 +- ...essibleTypeInTypeParameterConstraint.types | 2 +- .../accessOverriddenBaseClassMember1.types | 2 +- .../aliasUsageInAccessorsOfClass.types | 2 +- .../reference/aliasUsageInArray.types | 2 +- .../aliasUsageInFunctionExpression.types | 2 +- .../aliasUsageInGenericFunction.types | 2 +- .../aliasUsageInIndexerOfClass.types | 2 +- .../reference/aliasUsageInObjectLiteral.types | 2 +- .../reference/aliasUsageInOrExpression.types | 2 +- ...asUsageInTypeArgumentOfExtendsClause.types | 4 +- .../reference/aliasUsageInVarAssignment.types | 2 +- .../ambientClassDeclarationWithExtends.types | 2 +- ...oduleWithClassDeclarationWithExtends.types | 2 +- .../ambiguousOverloadResolution.types | 2 +- .../reference/arrayBestCommonTypes.types | 4 +- .../reference/arrayLiteralTypeInference.types | 4 +- tests/baselines/reference/arrayLiterals.types | 4 +- .../arrayLiteralsWithRecursiveGenerics.types | 2 +- .../assignmentCompatWithCallSignatures3.types | 6 +- .../assignmentCompatWithCallSignatures5.types | 6 +- .../assignmentCompatWithCallSignatures6.types | 6 +- ...gnmentCompatWithConstructSignatures3.types | 6 +- ...gnmentCompatWithConstructSignatures5.types | 6 +- ...gnmentCompatWithConstructSignatures6.types | 6 +- .../baseIndexSignatureResolution.types | 2 +- .../reference/baseTypeOrderChecking.types | 4 +- .../baseTypeWrappingInstantiationChain.types | 4 +- ...stCommonTypeOfConditionalExpressions.types | 4 +- .../reference/bestCommonTypeOfTuple2.types | 4 +- ...SignatureAssignabilityInInheritance2.types | 6 +- ...SignatureAssignabilityInInheritance4.types | 6 +- ...SignatureAssignabilityInInheritance5.types | 6 +- ...SignatureAssignabilityInInheritance6.types | 6 +- .../baselines/reference/callWithSpread.types | 2 +- .../reference/callWithSpreadES6.types | 2 +- .../reference/captureThisInSuperCall.types | 2 +- .../reference/checkForObjectTooStrict.types | 4 +- .../reference/circularImportAlias.types | 2 +- ...sConstructorParametersAccessibility3.types | 2 +- ...rationMergedInModuleWithContinuation.types | 2 +- .../classDoesNotDependOnBaseTypes.types | 2 +- .../reference/classExtendingBuiltinType.types | 20 ++-- .../reference/classExtendingClass.types | 4 +- .../classExtendingQualifiedName2.types | 2 +- .../reference/classImplementsClass3.types | 2 +- tests/baselines/reference/classOrder2.types | 2 +- tests/baselines/reference/classOrderBug.types | 2 +- .../reference/classSideInheritance2.types | 2 +- .../classWithProtectedProperty.types | 2 +- .../reference/commentOnAmbientClass1.types | 2 +- .../reference/commentOnAmbientModule.types | 2 +- .../reference/commentsInheritance.types | 4 +- ...mparisonOperatorWithIdenticalObjects.types | 4 +- ...atorWithSubtypeObjectOnCallSignature.types | 2 +- ...hSubtypeObjectOnConstructorSignature.types | 2 +- ...torWithSubtypeObjectOnIndexSignature.types | 2 +- ...ypeObjectOnInstantiatedCallSignature.types | 2 +- ...ctOnInstantiatedConstructorSignature.types | 2 +- ...nOperatorWithSubtypeObjectOnProperty.types | 4 +- .../reference/complexClassRelationships.types | 2 +- .../computedPropertyNames25_ES5.types | 2 +- .../computedPropertyNames25_ES6.types | 2 +- .../computedPropertyNames28_ES5.types | 2 +- .../computedPropertyNames28_ES6.types | 2 +- .../computedPropertyNames31_ES5.types | 2 +- .../computedPropertyNames31_ES6.types | 2 +- .../conditionalOperatorWithIdenticalBCT.types | 4 +- .../reference/constantOverloadFunction.types | 6 +- ...raintCheckInGenericBaseTypeReference.types | 2 +- ...SignatureAssignabilityInInheritance2.types | 6 +- ...SignatureAssignabilityInInheritance4.types | 6 +- ...SignatureAssignabilityInInheritance5.types | 6 +- ...SignatureAssignabilityInInheritance6.types | 6 +- .../baselines/reference/constructorArgs.types | 2 +- ...orFunctionTypeIsAssignableToBaseType.types | 4 +- ...rFunctionTypeIsAssignableToBaseType2.types | 4 +- .../constructorHasPrototypeProperty.types | 4 +- .../reference/constructorOverloads2.types | 2 +- .../contextualTypingArrayOfLambdas.types | 4 +- ...textualTypingOfConditionalExpression.types | 4 +- .../declFileAliasUseBeforeDeclaration2.types | 2 +- ...clFileForFunctionTypeAsTypeParameter.types | 2 +- ...GenericClassWithGenericExtendedClass.types | 2 +- .../reference/declFileGenericType.types | 2 +- .../reference/declFileGenericType2.types | 4 +- ...tingWithClassReferredByExtendsClause.types | 4 +- ...lauseThatHasItsContainerNameConflict.types | 2 +- .../declarationEmit_nameConflicts3.types | 2 +- .../declarationEmit_protectedMembers.types | 4 +- .../reference/declareDottedExtend.types | 4 +- ...sIndexersWithAssignmentCompatibility.types | 4 +- ...erivedClassOverridesProtectedMembers.types | 2 +- ...rivedClassOverridesProtectedMembers2.types | 4 +- .../derivedClassOverridesWithoutSubtype.types | 4 +- .../baselines/reference/derivedClasses.types | 4 +- ...HiddenBaseCallViaSuperPropertyAccess.types | 2 +- ...rivedTypeDoesNotRequireExtendsClause.types | 2 +- ...ionWithExtensionAndTypeArgumentInES6.types | 4 +- ...itClassDeclarationWithExtensionInES6.types | 4 +- ...clarationWithPropertyAssignmentInES6.types | 4 +- ...lassDeclarationWithSuperMethodCall01.types | 2 +- .../reference/es6ClassSuperCodegenBug.types | 2 +- tests/baselines/reference/es6ClassTest7.types | 2 +- .../exportAssignmentOfGenericType1.types | 2 +- tests/baselines/reference/extBaseClass1.types | 6 +- .../extendAndImplementTheSameBaseType.types | 2 +- .../extendBaseClassBeforeItsDeclared.types | 2 +- .../reference/extendNonClassSymbol1.types | 2 +- ...ndingClassFromAliasAndUsageInIndexer.types | 4 +- .../reference/functionImplementations.types | 4 +- .../functionSubtypingOfVarArgs.types | 2 +- .../functionSubtypingOfVarArgs2.types | 2 +- .../reference/generatedContextualTyping.types | 4 +- .../reference/generatorTypeCheck17.types | 2 +- .../reference/generatorTypeCheck19.types | 2 +- .../genericBaseClassLiteralProperty.types | 2 +- .../genericBaseClassLiteralProperty2.types | 2 +- ...WithConstraintsTypeArgumentInference.types | 4 +- .../genericCallWithObjectTypeArgs2.types | 4 +- ...allWithObjectTypeArgsAndConstraints2.types | 2 +- .../genericCallbacksAndClassHierarchy.types | 2 +- ...heritsConstructorFromNonGenericClass.types | 4 +- ...assPropertyInheritanceSpecialization.types | 2 +- .../reference/genericClassStaticMethod.types | 2 +- .../baselines/reference/genericClasses3.types | 2 +- ...ericConstraintOnExtendedBuiltinTypes.types | 2 +- ...ricConstraintOnExtendedBuiltinTypes2.types | 2 +- .../reference/genericPrototypeProperty2.types | 4 +- .../reference/genericPrototypeProperty3.types | 4 +- ...cRecursiveImplicitConstructorErrors2.types | 2 +- ...nericWithIndexerOfTypeParameterType2.types | 4 +- .../heterogeneousArrayLiterals.types | 4 +- .../reference/ifDoWhileStatements.types | 2 +- .../reference/importShadowsGlobalName.types | 2 +- .../reference/importUsedInExtendsList1.types | 2 +- ...finitelyExpandingTypesNonGenericBase.types | 2 +- ...eNamePrivatePropertiesFromSameOrigin.types | 4 +- ...nheritanceMemberFuncOverridingMethod.types | 2 +- ...anceMemberPropertyOverridingProperty.types | 2 +- ...heritanceOfGenericConstructorMethod1.types | 2 +- ...heritanceOfGenericConstructorMethod2.types | 4 +- ...nheritanceStaticFuncOverridingMethod.types | 2 +- ...aticFuncOverridingPropertyOfFuncType.types | 2 +- ...icFunctionOverridingInstanceProperty.types | 2 +- .../inheritanceStaticMembersCompatible.types | 2 +- ...anceStaticPropertyOverridingProperty.types | 2 +- ...instantiatedReturnTypeContravariance.types | 2 +- .../reference/interfaceExtendsClass1.types | 6 +- .../reference/iterableArrayPattern11.types | 2 +- .../reference/iterableArrayPattern12.types | 2 +- .../reference/iterableArrayPattern13.types | 2 +- .../reference/iterableArrayPattern3.types | 2 +- .../reference/iterableArrayPattern4.types | 2 +- .../reference/iterableArrayPattern9.types | 2 +- tests/baselines/reference/localTypes1.types | 4 +- tests/baselines/reference/m7Bugs.types | 2 +- ...oduleImportedForTypeArgumentPosition.types | 2 +- .../moduleWithStatementsOfEveryKind.types | 8 +- .../mutuallyRecursiveGenericBaseTypes2.types | 2 +- tests/baselines/reference/noEmitHelpers.types | 2 +- ...ricClassExtendingGenericClassWithAny.types | 2 +- .../reference/numericIndexerConstraint3.types | 2 +- .../reference/numericIndexerConstraint4.types | 2 +- ...ectTypesIdentityWithNumericIndexers1.types | 4 +- ...ectTypesIdentityWithNumericIndexers2.types | 6 +- ...ectTypesIdentityWithNumericIndexers3.types | 4 +- .../objectTypesIdentityWithPrivates.types | 4 +- .../objectTypesIdentityWithPrivates2.types | 2 +- ...bjectTypesIdentityWithStringIndexers.types | 4 +- ...jectTypesIdentityWithStringIndexers2.types | 6 +- .../optionalConstructorArgInSuper.types | 2 +- .../reference/optionalParamInOverride.types | 2 +- .../overloadOnConstConstraintChecks1.types | 6 +- .../overloadOnConstConstraintChecks2.types | 4 +- .../overloadOnConstConstraintChecks3.types | 4 +- tests/baselines/reference/privacyClass.types | 48 +++++----- .../baselines/reference/privacyGloClass.types | 20 ++-- ...ccessOnTypeParameterWithConstraints2.types | 2 +- ...lassPropertyAccessibleWithinSubclass.types | 2 +- .../recursiveBaseConstructorCreation1.types | 2 +- .../recursiveBaseConstructorCreation2.types | 4 +- ...nstantiationsWithDefaultConstructors.types | 2 +- .../recursiveComplicatedClasses.types | 6 +- ...elySpecializedConstructorDeclaration.types | 2 +- ...sDeclarationWhenInBaseTypeResolution.types | 94 +++++++++---------- .../reference/returnStatements.types | 2 +- ...thDefaultConstructorAndExtendsClause.types | 2 +- .../specializedInheritedConstructors1.types | 2 +- .../baselines/reference/staticFactory1.types | 2 +- .../reference/staticInheritance.types | 2 +- .../staticMemberAccessOffDerivedType1.types | 2 +- .../reference/subtypingTransitivity.types | 4 +- .../subtypingWithCallSignatures2.types | 6 +- .../subtypingWithCallSignatures3.types | 6 +- .../subtypingWithCallSignatures4.types | 6 +- .../subtypingWithConstructSignatures2.types | 6 +- .../subtypingWithConstructSignatures3.types | 6 +- .../subtypingWithConstructSignatures4.types | 6 +- .../subtypingWithConstructSignatures5.types | 6 +- .../subtypingWithConstructSignatures6.types | 6 +- .../subtypingWithObjectMembers4.types | 8 +- tests/baselines/reference/super2.types | 8 +- .../reference/superAccessInFatArrow1.types | 2 +- ...FromClassThatDerivesFromGenericType1.types | 2 +- ...FromClassThatDerivesFromGenericType2.types | 2 +- .../superCallParameterContextualTyping1.types | 2 +- .../superCallParameterContextualTyping3.types | 2 +- tests/baselines/reference/superCalls.types | 4 +- .../reference/superInCatchBlock1.types | 2 +- .../superWithGenericSpecialization.types | 2 +- .../reference/superWithGenerics.types | 2 +- .../reference/switchStatements.types | 2 +- .../reference/symbolProperty26.types | 2 +- .../reference/symbolProperty27.types | 2 +- .../reference/symbolProperty28.types | 2 +- .../reference/typeGuardFunction.types | 2 +- .../reference/typeGuardFunctionGenerics.types | 2 +- .../reference/typeGuardOfFormInstanceOf.types | 2 +- .../reference/typeGuardOfFormIsType.types | 2 +- .../baselines/reference/typeOfSuperCall.types | 2 +- .../typeParameterExtendingUnion1.types | 4 +- .../typeParameterExtendingUnion2.types | 4 +- tests/baselines/reference/typeofClass2.types | 2 +- .../typesWithSpecializedCallSignatures.types | 4 +- ...esWithSpecializedConstructSignatures.types | 4 +- .../undefinedIsSubtypeOfEverything.types | 44 ++++----- .../reference/underscoreMapFirst.types | 2 +- .../reference/unionTypeFromArrayLiteral.types | 4 +- .../reference/validUseOfThisInSuper.types | 2 +- .../reference/varArgsOnConstructorTypes.types | 2 +- 231 files changed, 463 insertions(+), 463 deletions(-) diff --git a/tests/baselines/reference/ExportClassWithAccessibleTypesInTypeParameterConstraintsClassHeritageListMemberTypeAnnotations.types b/tests/baselines/reference/ExportClassWithAccessibleTypesInTypeParameterConstraintsClassHeritageListMemberTypeAnnotations.types index 91c1ea573ec..a5cefcc521e 100644 --- a/tests/baselines/reference/ExportClassWithAccessibleTypesInTypeParameterConstraintsClassHeritageListMemberTypeAnnotations.types +++ b/tests/baselines/reference/ExportClassWithAccessibleTypesInTypeParameterConstraintsClassHeritageListMemberTypeAnnotations.types @@ -23,7 +23,7 @@ module A { export class Point3d extends Point { >Point3d : Point3d ->Point : typeof Point +>Point : Point z: number; >z : number diff --git a/tests/baselines/reference/ExportClassWithInaccessibleTypeInTypeParameterConstraint.types b/tests/baselines/reference/ExportClassWithInaccessibleTypeInTypeParameterConstraint.types index e1764ef1c20..ba174d9bbba 100644 --- a/tests/baselines/reference/ExportClassWithInaccessibleTypeInTypeParameterConstraint.types +++ b/tests/baselines/reference/ExportClassWithInaccessibleTypeInTypeParameterConstraint.types @@ -23,7 +23,7 @@ module A { export class Point3d extends Point { >Point3d : Point3d ->Point : typeof Point +>Point : Point z: number; >z : number diff --git a/tests/baselines/reference/accessOverriddenBaseClassMember1.types b/tests/baselines/reference/accessOverriddenBaseClassMember1.types index 91b84981fc1..2aeb541d723 100644 --- a/tests/baselines/reference/accessOverriddenBaseClassMember1.types +++ b/tests/baselines/reference/accessOverriddenBaseClassMember1.types @@ -25,7 +25,7 @@ class Point { } class ColoredPoint extends Point { >ColoredPoint : ColoredPoint ->Point : typeof Point +>Point : Point constructor(x: number, y: number, public color: string) { >x : number diff --git a/tests/baselines/reference/aliasUsageInAccessorsOfClass.types b/tests/baselines/reference/aliasUsageInAccessorsOfClass.types index df91e254c65..092643002e4 100644 --- a/tests/baselines/reference/aliasUsageInAccessorsOfClass.types +++ b/tests/baselines/reference/aliasUsageInAccessorsOfClass.types @@ -53,7 +53,7 @@ import Backbone = require("aliasUsage1_backbone"); export class VisualizationModel extends Backbone.Model { >VisualizationModel : VisualizationModel ->Backbone.Model : typeof Backbone.Model +>Backbone.Model : Backbone.Model >Backbone : typeof Backbone >Model : typeof Backbone.Model diff --git a/tests/baselines/reference/aliasUsageInArray.types b/tests/baselines/reference/aliasUsageInArray.types index 9410d4362bb..488cc97d07f 100644 --- a/tests/baselines/reference/aliasUsageInArray.types +++ b/tests/baselines/reference/aliasUsageInArray.types @@ -41,7 +41,7 @@ import Backbone = require("aliasUsageInArray_backbone"); export class VisualizationModel extends Backbone.Model { >VisualizationModel : VisualizationModel ->Backbone.Model : typeof Backbone.Model +>Backbone.Model : Backbone.Model >Backbone : typeof Backbone >Model : typeof Backbone.Model diff --git a/tests/baselines/reference/aliasUsageInFunctionExpression.types b/tests/baselines/reference/aliasUsageInFunctionExpression.types index 9b2244f9ff8..eec4341fd67 100644 --- a/tests/baselines/reference/aliasUsageInFunctionExpression.types +++ b/tests/baselines/reference/aliasUsageInFunctionExpression.types @@ -42,7 +42,7 @@ import Backbone = require("aliasUsageInFunctionExpression_backbone"); export class VisualizationModel extends Backbone.Model { >VisualizationModel : VisualizationModel ->Backbone.Model : typeof Backbone.Model +>Backbone.Model : Backbone.Model >Backbone : typeof Backbone >Model : typeof Backbone.Model diff --git a/tests/baselines/reference/aliasUsageInGenericFunction.types b/tests/baselines/reference/aliasUsageInGenericFunction.types index 8fdc39d3c6a..c21e691d773 100644 --- a/tests/baselines/reference/aliasUsageInGenericFunction.types +++ b/tests/baselines/reference/aliasUsageInGenericFunction.types @@ -57,7 +57,7 @@ import Backbone = require("aliasUsageInGenericFunction_backbone"); export class VisualizationModel extends Backbone.Model { >VisualizationModel : VisualizationModel ->Backbone.Model : typeof Backbone.Model +>Backbone.Model : Backbone.Model >Backbone : typeof Backbone >Model : typeof Backbone.Model diff --git a/tests/baselines/reference/aliasUsageInIndexerOfClass.types b/tests/baselines/reference/aliasUsageInIndexerOfClass.types index ce9c598df4d..b7e4873ba34 100644 --- a/tests/baselines/reference/aliasUsageInIndexerOfClass.types +++ b/tests/baselines/reference/aliasUsageInIndexerOfClass.types @@ -50,7 +50,7 @@ import Backbone = require("aliasUsageInIndexerOfClass_backbone"); export class VisualizationModel extends Backbone.Model { >VisualizationModel : VisualizationModel ->Backbone.Model : typeof Backbone.Model +>Backbone.Model : Backbone.Model >Backbone : typeof Backbone >Model : typeof Backbone.Model diff --git a/tests/baselines/reference/aliasUsageInObjectLiteral.types b/tests/baselines/reference/aliasUsageInObjectLiteral.types index 58db02d1bf0..5ab294b7350 100644 --- a/tests/baselines/reference/aliasUsageInObjectLiteral.types +++ b/tests/baselines/reference/aliasUsageInObjectLiteral.types @@ -55,7 +55,7 @@ import Backbone = require("aliasUsageInObjectLiteral_backbone"); export class VisualizationModel extends Backbone.Model { >VisualizationModel : VisualizationModel ->Backbone.Model : typeof Backbone.Model +>Backbone.Model : Backbone.Model >Backbone : typeof Backbone >Model : typeof Backbone.Model diff --git a/tests/baselines/reference/aliasUsageInOrExpression.types b/tests/baselines/reference/aliasUsageInOrExpression.types index 2c86e51841f..e7ca8639762 100644 --- a/tests/baselines/reference/aliasUsageInOrExpression.types +++ b/tests/baselines/reference/aliasUsageInOrExpression.types @@ -79,7 +79,7 @@ import Backbone = require("aliasUsageInOrExpression_backbone"); export class VisualizationModel extends Backbone.Model { >VisualizationModel : VisualizationModel ->Backbone.Model : typeof Backbone.Model +>Backbone.Model : Backbone.Model >Backbone : typeof Backbone >Model : typeof Backbone.Model diff --git a/tests/baselines/reference/aliasUsageInTypeArgumentOfExtendsClause.types b/tests/baselines/reference/aliasUsageInTypeArgumentOfExtendsClause.types index 58fac086fd3..ae20caa9c37 100644 --- a/tests/baselines/reference/aliasUsageInTypeArgumentOfExtendsClause.types +++ b/tests/baselines/reference/aliasUsageInTypeArgumentOfExtendsClause.types @@ -25,7 +25,7 @@ class C { } class D extends C { >D : D ->C : typeof C +>C : C >IHasVisualizationModel : IHasVisualizationModel x = moduleA; @@ -46,7 +46,7 @@ import Backbone = require("aliasUsageInTypeArgumentOfExtendsClause_backbone"); export class VisualizationModel extends Backbone.Model { >VisualizationModel : VisualizationModel ->Backbone.Model : typeof Backbone.Model +>Backbone.Model : Backbone.Model >Backbone : typeof Backbone >Model : typeof Backbone.Model diff --git a/tests/baselines/reference/aliasUsageInVarAssignment.types b/tests/baselines/reference/aliasUsageInVarAssignment.types index 945fd16899f..6a23293ea7c 100644 --- a/tests/baselines/reference/aliasUsageInVarAssignment.types +++ b/tests/baselines/reference/aliasUsageInVarAssignment.types @@ -37,7 +37,7 @@ import Backbone = require("aliasUsageInVarAssignment_backbone"); export class VisualizationModel extends Backbone.Model { >VisualizationModel : VisualizationModel ->Backbone.Model : typeof Backbone.Model +>Backbone.Model : Backbone.Model >Backbone : typeof Backbone >Model : typeof Backbone.Model diff --git a/tests/baselines/reference/ambientClassDeclarationWithExtends.types b/tests/baselines/reference/ambientClassDeclarationWithExtends.types index fc60ddcea86..7609856882b 100644 --- a/tests/baselines/reference/ambientClassDeclarationWithExtends.types +++ b/tests/baselines/reference/ambientClassDeclarationWithExtends.types @@ -4,5 +4,5 @@ declare class A { } declare class B extends A { } >B : B ->A : typeof A +>A : A diff --git a/tests/baselines/reference/ambientModuleWithClassDeclarationWithExtends.types b/tests/baselines/reference/ambientModuleWithClassDeclarationWithExtends.types index 875fd034e03..2708946518f 100644 --- a/tests/baselines/reference/ambientModuleWithClassDeclarationWithExtends.types +++ b/tests/baselines/reference/ambientModuleWithClassDeclarationWithExtends.types @@ -7,5 +7,5 @@ declare module foo { class B extends A { } >B : B ->A : typeof A +>A : A } diff --git a/tests/baselines/reference/ambiguousOverloadResolution.types b/tests/baselines/reference/ambiguousOverloadResolution.types index f01c53c2941..dd42b44d7c3 100644 --- a/tests/baselines/reference/ambiguousOverloadResolution.types +++ b/tests/baselines/reference/ambiguousOverloadResolution.types @@ -4,7 +4,7 @@ class A { } class B extends A { x: number; } >B : B ->A : typeof A +>A : A >x : number declare function f(p: A, q: B): number; diff --git a/tests/baselines/reference/arrayBestCommonTypes.types b/tests/baselines/reference/arrayBestCommonTypes.types index b240eebd798..5650efc9ae7 100644 --- a/tests/baselines/reference/arrayBestCommonTypes.types +++ b/tests/baselines/reference/arrayBestCommonTypes.types @@ -15,7 +15,7 @@ module EmptyTypes { class derived extends base { } >derived : derived ->base : typeof base +>base : base class f { @@ -417,7 +417,7 @@ module NonEmptyTypes { class derived extends base { a: string; } >derived : derived ->base : typeof base +>base : base >a : string diff --git a/tests/baselines/reference/arrayLiteralTypeInference.types b/tests/baselines/reference/arrayLiteralTypeInference.types index 853db63b538..660592fceb8 100644 --- a/tests/baselines/reference/arrayLiteralTypeInference.types +++ b/tests/baselines/reference/arrayLiteralTypeInference.types @@ -8,7 +8,7 @@ class Action { class ActionA extends Action { >ActionA : ActionA ->Action : typeof Action +>Action : Action value: string; >value : string @@ -16,7 +16,7 @@ class ActionA extends Action { class ActionB extends Action { >ActionB : ActionB ->Action : typeof Action +>Action : Action trueNess: boolean; >trueNess : boolean diff --git a/tests/baselines/reference/arrayLiterals.types b/tests/baselines/reference/arrayLiterals.types index 756ed7145e3..e103241dd0b 100644 --- a/tests/baselines/reference/arrayLiterals.types +++ b/tests/baselines/reference/arrayLiterals.types @@ -123,12 +123,12 @@ class Base { private p; } class Derived1 extends Base { private m }; >Derived1 : Derived1 ->Base : typeof Base +>Base : Base >m : any class Derived2 extends Base { private n }; >Derived2 : Derived2 ->Base : typeof Base +>Base : Base >n : any var context3: Base[] = [new Derived1(), new Derived2()]; diff --git a/tests/baselines/reference/arrayLiteralsWithRecursiveGenerics.types b/tests/baselines/reference/arrayLiteralsWithRecursiveGenerics.types index 598ccfe9ca5..9cdbe0a0a61 100644 --- a/tests/baselines/reference/arrayLiteralsWithRecursiveGenerics.types +++ b/tests/baselines/reference/arrayLiteralsWithRecursiveGenerics.types @@ -17,7 +17,7 @@ class List { class DerivedList extends List { >DerivedList : DerivedList >U : U ->List : typeof List +>List : List >U : U foo: U; diff --git a/tests/baselines/reference/assignmentCompatWithCallSignatures3.types b/tests/baselines/reference/assignmentCompatWithCallSignatures3.types index 9fa591812ee..72cceae84ff 100644 --- a/tests/baselines/reference/assignmentCompatWithCallSignatures3.types +++ b/tests/baselines/reference/assignmentCompatWithCallSignatures3.types @@ -7,17 +7,17 @@ class Base { foo: string; } class Derived extends Base { bar: string; } >Derived : Derived ->Base : typeof Base +>Base : Base >bar : string class Derived2 extends Derived { baz: string; } >Derived2 : Derived2 ->Derived : typeof Derived +>Derived : Derived >baz : string class OtherDerived extends Base { bing: string; } >OtherDerived : OtherDerived ->Base : typeof Base +>Base : Base >bing : string var a: (x: number) => number[]; diff --git a/tests/baselines/reference/assignmentCompatWithCallSignatures5.types b/tests/baselines/reference/assignmentCompatWithCallSignatures5.types index 8ed785b0044..2652a2a4e68 100644 --- a/tests/baselines/reference/assignmentCompatWithCallSignatures5.types +++ b/tests/baselines/reference/assignmentCompatWithCallSignatures5.types @@ -7,17 +7,17 @@ class Base { foo: string; } class Derived extends Base { bar: string; } >Derived : Derived ->Base : typeof Base +>Base : Base >bar : string class Derived2 extends Derived { baz: string; } >Derived2 : Derived2 ->Derived : typeof Derived +>Derived : Derived >baz : string class OtherDerived extends Base { bing: string; } >OtherDerived : OtherDerived ->Base : typeof Base +>Base : Base >bing : string var a: (x: T) => T[]; diff --git a/tests/baselines/reference/assignmentCompatWithCallSignatures6.types b/tests/baselines/reference/assignmentCompatWithCallSignatures6.types index 309834e5974..b45f3357942 100644 --- a/tests/baselines/reference/assignmentCompatWithCallSignatures6.types +++ b/tests/baselines/reference/assignmentCompatWithCallSignatures6.types @@ -7,17 +7,17 @@ class Base { foo: string; } class Derived extends Base { bar: string; } >Derived : Derived ->Base : typeof Base +>Base : Base >bar : string class Derived2 extends Derived { baz: string; } >Derived2 : Derived2 ->Derived : typeof Derived +>Derived : Derived >baz : string class OtherDerived extends Base { bing: string; } >OtherDerived : OtherDerived ->Base : typeof Base +>Base : Base >bing : string interface A { diff --git a/tests/baselines/reference/assignmentCompatWithConstructSignatures3.types b/tests/baselines/reference/assignmentCompatWithConstructSignatures3.types index 25200f7988f..807f31b0e6e 100644 --- a/tests/baselines/reference/assignmentCompatWithConstructSignatures3.types +++ b/tests/baselines/reference/assignmentCompatWithConstructSignatures3.types @@ -7,17 +7,17 @@ class Base { foo: string; } class Derived extends Base { bar: string; } >Derived : Derived ->Base : typeof Base +>Base : Base >bar : string class Derived2 extends Derived { baz: string; } >Derived2 : Derived2 ->Derived : typeof Derived +>Derived : Derived >baz : string class OtherDerived extends Base { bing: string; } >OtherDerived : OtherDerived ->Base : typeof Base +>Base : Base >bing : string var a: new (x: number) => number[]; diff --git a/tests/baselines/reference/assignmentCompatWithConstructSignatures5.types b/tests/baselines/reference/assignmentCompatWithConstructSignatures5.types index 276ba7f6940..6e6a1457a76 100644 --- a/tests/baselines/reference/assignmentCompatWithConstructSignatures5.types +++ b/tests/baselines/reference/assignmentCompatWithConstructSignatures5.types @@ -7,17 +7,17 @@ class Base { foo: string; } class Derived extends Base { bar: string; } >Derived : Derived ->Base : typeof Base +>Base : Base >bar : string class Derived2 extends Derived { baz: string; } >Derived2 : Derived2 ->Derived : typeof Derived +>Derived : Derived >baz : string class OtherDerived extends Base { bing: string; } >OtherDerived : OtherDerived ->Base : typeof Base +>Base : Base >bing : string var a: new (x: T) => T[]; diff --git a/tests/baselines/reference/assignmentCompatWithConstructSignatures6.types b/tests/baselines/reference/assignmentCompatWithConstructSignatures6.types index 49b26118fa3..74a20b9b21e 100644 --- a/tests/baselines/reference/assignmentCompatWithConstructSignatures6.types +++ b/tests/baselines/reference/assignmentCompatWithConstructSignatures6.types @@ -7,17 +7,17 @@ class Base { foo: string; } class Derived extends Base { bar: string; } >Derived : Derived ->Base : typeof Base +>Base : Base >bar : string class Derived2 extends Derived { baz: string; } >Derived2 : Derived2 ->Derived : typeof Derived +>Derived : Derived >baz : string class OtherDerived extends Base { bing: string; } >OtherDerived : OtherDerived ->Base : typeof Base +>Base : Base >bing : string interface A { diff --git a/tests/baselines/reference/baseIndexSignatureResolution.types b/tests/baselines/reference/baseIndexSignatureResolution.types index 6a57d4b9805..90d143155fb 100644 --- a/tests/baselines/reference/baseIndexSignatureResolution.types +++ b/tests/baselines/reference/baseIndexSignatureResolution.types @@ -5,7 +5,7 @@ class Base { private a: string; } class Derived extends Base { private b: string; } >Derived : Derived ->Base : typeof Base +>Base : Base >b : string // Note - commmenting "extends Foo" prevents the error diff --git a/tests/baselines/reference/baseTypeOrderChecking.types b/tests/baselines/reference/baseTypeOrderChecking.types index 32f3325e85c..4193f255f36 100644 --- a/tests/baselines/reference/baseTypeOrderChecking.types +++ b/tests/baselines/reference/baseTypeOrderChecking.types @@ -17,7 +17,7 @@ class Class1 class Class2 extends Class1 >Class2 : Class2 ->Class1 : typeof Class1 +>Class1 : Class1 { @@ -42,7 +42,7 @@ class Class3 class Class4 extends Class3 >Class4 : Class4 >T : T ->Class3 : typeof Class3 +>Class3 : Class3 >T : T { diff --git a/tests/baselines/reference/baseTypeWrappingInstantiationChain.types b/tests/baselines/reference/baseTypeWrappingInstantiationChain.types index bce18aa359e..747b672dd0d 100644 --- a/tests/baselines/reference/baseTypeWrappingInstantiationChain.types +++ b/tests/baselines/reference/baseTypeWrappingInstantiationChain.types @@ -2,7 +2,7 @@ class C extends CBase { >C : C >T1 : T1 ->CBase : typeof CBase +>CBase : CBase >T1 : T1 public works() { @@ -35,7 +35,7 @@ class C extends CBase { class CBase extends CBaseBase> { >CBase : CBase >T2 : T2 ->CBaseBase : typeof CBaseBase +>CBaseBase : CBaseBase> >Wrapper : Wrapper >T2 : T2 diff --git a/tests/baselines/reference/bestCommonTypeOfConditionalExpressions.types b/tests/baselines/reference/bestCommonTypeOfConditionalExpressions.types index 72510bfc324..2a5ee6a2fe2 100644 --- a/tests/baselines/reference/bestCommonTypeOfConditionalExpressions.types +++ b/tests/baselines/reference/bestCommonTypeOfConditionalExpressions.types @@ -18,12 +18,12 @@ class Base { foo: string; } class Derived extends Base { bar: string; } >Derived : Derived ->Base : typeof Base +>Base : Base >bar : string class Derived2 extends Base { baz: string; } >Derived2 : Derived2 ->Base : typeof Base +>Base : Base >baz : string var base: Base; diff --git a/tests/baselines/reference/bestCommonTypeOfTuple2.types b/tests/baselines/reference/bestCommonTypeOfTuple2.types index ceb15c45cba..32196fdf668 100644 --- a/tests/baselines/reference/bestCommonTypeOfTuple2.types +++ b/tests/baselines/reference/bestCommonTypeOfTuple2.types @@ -23,7 +23,7 @@ class E implements base { e } class F extends C { f } >F : F ->C : typeof C +>C : C >f : any class C1 implements base1 { i = "foo"; c } @@ -35,7 +35,7 @@ class C1 implements base1 { i = "foo"; c } class D1 extends C1 { i = "bar"; d } >D1 : D1 ->C1 : typeof C1 +>C1 : C1 >i : string >"bar" : string >d : any diff --git a/tests/baselines/reference/callSignatureAssignabilityInInheritance2.types b/tests/baselines/reference/callSignatureAssignabilityInInheritance2.types index b98cd8d36c9..335413cd73e 100644 --- a/tests/baselines/reference/callSignatureAssignabilityInInheritance2.types +++ b/tests/baselines/reference/callSignatureAssignabilityInInheritance2.types @@ -7,17 +7,17 @@ class Base { foo: string; } class Derived extends Base { bar: string; } >Derived : Derived ->Base : typeof Base +>Base : Base >bar : string class Derived2 extends Derived { baz: string; } >Derived2 : Derived2 ->Derived : typeof Derived +>Derived : Derived >baz : string class OtherDerived extends Base { bing: string; } >OtherDerived : OtherDerived ->Base : typeof Base +>Base : Base >bing : string interface A { // T diff --git a/tests/baselines/reference/callSignatureAssignabilityInInheritance4.types b/tests/baselines/reference/callSignatureAssignabilityInInheritance4.types index c7f573fe9df..0575d1332ce 100644 --- a/tests/baselines/reference/callSignatureAssignabilityInInheritance4.types +++ b/tests/baselines/reference/callSignatureAssignabilityInInheritance4.types @@ -7,17 +7,17 @@ class Base { foo: string; } class Derived extends Base { bar: string; } >Derived : Derived ->Base : typeof Base +>Base : Base >bar : string class Derived2 extends Derived { baz: string; } >Derived2 : Derived2 ->Derived : typeof Derived +>Derived : Derived >baz : string class OtherDerived extends Base { bing: string; } >OtherDerived : OtherDerived ->Base : typeof Base +>Base : Base >bing : string interface A { // T diff --git a/tests/baselines/reference/callSignatureAssignabilityInInheritance5.types b/tests/baselines/reference/callSignatureAssignabilityInInheritance5.types index 14325053248..0ffc8257a56 100644 --- a/tests/baselines/reference/callSignatureAssignabilityInInheritance5.types +++ b/tests/baselines/reference/callSignatureAssignabilityInInheritance5.types @@ -8,17 +8,17 @@ class Base { foo: string; } class Derived extends Base { bar: string; } >Derived : Derived ->Base : typeof Base +>Base : Base >bar : string class Derived2 extends Derived { baz: string; } >Derived2 : Derived2 ->Derived : typeof Derived +>Derived : Derived >baz : string class OtherDerived extends Base { bing: string; } >OtherDerived : OtherDerived ->Base : typeof Base +>Base : Base >bing : string interface A { // T diff --git a/tests/baselines/reference/callSignatureAssignabilityInInheritance6.types b/tests/baselines/reference/callSignatureAssignabilityInInheritance6.types index 67f43b9990a..721b691be70 100644 --- a/tests/baselines/reference/callSignatureAssignabilityInInheritance6.types +++ b/tests/baselines/reference/callSignatureAssignabilityInInheritance6.types @@ -9,17 +9,17 @@ class Base { foo: string; } class Derived extends Base { bar: string; } >Derived : Derived ->Base : typeof Base +>Base : Base >bar : string class Derived2 extends Derived { baz: string; } >Derived2 : Derived2 ->Derived : typeof Derived +>Derived : Derived >baz : string class OtherDerived extends Base { bing: string; } >OtherDerived : OtherDerived ->Base : typeof Base +>Base : Base >bing : string interface A { // T diff --git a/tests/baselines/reference/callWithSpread.types b/tests/baselines/reference/callWithSpread.types index 68c738f1832..f7097727204 100644 --- a/tests/baselines/reference/callWithSpread.types +++ b/tests/baselines/reference/callWithSpread.types @@ -205,7 +205,7 @@ class C { class D extends C { >D : D ->C : typeof C +>C : C constructor() { super(1, 2); diff --git a/tests/baselines/reference/callWithSpreadES6.types b/tests/baselines/reference/callWithSpreadES6.types index ecbfba54e9f..ba638207e8a 100644 --- a/tests/baselines/reference/callWithSpreadES6.types +++ b/tests/baselines/reference/callWithSpreadES6.types @@ -206,7 +206,7 @@ class C { class D extends C { >D : D ->C : typeof C +>C : C constructor() { super(1, 2); diff --git a/tests/baselines/reference/captureThisInSuperCall.types b/tests/baselines/reference/captureThisInSuperCall.types index b67307e4f83..faa7d2ad97e 100644 --- a/tests/baselines/reference/captureThisInSuperCall.types +++ b/tests/baselines/reference/captureThisInSuperCall.types @@ -8,7 +8,7 @@ class A { class B extends A { >B : B ->A : typeof A +>A : A constructor() { super({ test: () => this.someMethod()}); } >super({ test: () => this.someMethod()}) : void diff --git a/tests/baselines/reference/checkForObjectTooStrict.types b/tests/baselines/reference/checkForObjectTooStrict.types index a6cd5194f02..f6b63019cd5 100644 --- a/tests/baselines/reference/checkForObjectTooStrict.types +++ b/tests/baselines/reference/checkForObjectTooStrict.types @@ -13,7 +13,7 @@ module Foo { class Bar extends Foo.Object { // should work >Bar : Bar ->Foo.Object : typeof Foo.Object +>Foo.Object : Foo.Object >Foo : typeof Foo >Object : typeof Foo.Object @@ -30,7 +30,7 @@ class Bar extends Foo.Object { // should work class Baz extends Object { >Baz : Baz ->Object : ObjectConstructor +>Object : Object constructor () { // ERROR, as expected diff --git a/tests/baselines/reference/circularImportAlias.types b/tests/baselines/reference/circularImportAlias.types index 436ad56ddf8..e4b2f27dbbe 100644 --- a/tests/baselines/reference/circularImportAlias.types +++ b/tests/baselines/reference/circularImportAlias.types @@ -10,7 +10,7 @@ module B { export class D extends a.C { >D : D ->a.C : typeof a.C +>a.C : a.C >a : typeof a >C : typeof a.C diff --git a/tests/baselines/reference/classConstructorParametersAccessibility3.types b/tests/baselines/reference/classConstructorParametersAccessibility3.types index 5df83005ad9..3372044569c 100644 --- a/tests/baselines/reference/classConstructorParametersAccessibility3.types +++ b/tests/baselines/reference/classConstructorParametersAccessibility3.types @@ -8,7 +8,7 @@ class Base { class Derived extends Base { >Derived : Derived ->Base : typeof Base +>Base : Base constructor(public p: number) { >p : number diff --git a/tests/baselines/reference/classDeclarationMergedInModuleWithContinuation.types b/tests/baselines/reference/classDeclarationMergedInModuleWithContinuation.types index ddf8b10d1a1..11fcac506b6 100644 --- a/tests/baselines/reference/classDeclarationMergedInModuleWithContinuation.types +++ b/tests/baselines/reference/classDeclarationMergedInModuleWithContinuation.types @@ -19,7 +19,7 @@ module M { export class O extends M.N { >O : O ->M.N : typeof N +>M.N : N >M : typeof M >N : typeof N } diff --git a/tests/baselines/reference/classDoesNotDependOnBaseTypes.types b/tests/baselines/reference/classDoesNotDependOnBaseTypes.types index 5ea05baf35e..c342f0ea002 100644 --- a/tests/baselines/reference/classDoesNotDependOnBaseTypes.types +++ b/tests/baselines/reference/classDoesNotDependOnBaseTypes.types @@ -39,5 +39,5 @@ class StringTreeCollectionBase { class StringTreeCollection extends StringTreeCollectionBase { } >StringTreeCollection : StringTreeCollection ->StringTreeCollectionBase : typeof StringTreeCollectionBase +>StringTreeCollectionBase : StringTreeCollectionBase diff --git a/tests/baselines/reference/classExtendingBuiltinType.types b/tests/baselines/reference/classExtendingBuiltinType.types index ce774c0bff0..b50137e58d6 100644 --- a/tests/baselines/reference/classExtendingBuiltinType.types +++ b/tests/baselines/reference/classExtendingBuiltinType.types @@ -1,41 +1,41 @@ === tests/cases/conformance/classes/classDeclarations/classExtendingBuiltinType.ts === class C1 extends Object { } >C1 : C1 ->Object : ObjectConstructor +>Object : Object class C2 extends Function { } >C2 : C2 ->Function : FunctionConstructor +>Function : Function class C3 extends String { } >C3 : C3 ->String : StringConstructor +>String : String class C4 extends Boolean { } >C4 : C4 ->Boolean : BooleanConstructor +>Boolean : Boolean class C5 extends Number { } >C5 : C5 ->Number : NumberConstructor +>Number : Number class C6 extends Date { } >C6 : C6 ->Date : DateConstructor +>Date : Date class C7 extends RegExp { } >C7 : C7 ->RegExp : RegExpConstructor +>RegExp : RegExp class C8 extends Error { } >C8 : C8 ->Error : ErrorConstructor +>Error : Error class C9 extends Array { } >C9 : C9 ->Array : ArrayConstructor +>Array : any[] class C10 extends Array { } >C10 : C10 ->Array : ArrayConstructor +>Array : number[] diff --git a/tests/baselines/reference/classExtendingClass.types b/tests/baselines/reference/classExtendingClass.types index b72463ae2d7..f91493e97fd 100644 --- a/tests/baselines/reference/classExtendingClass.types +++ b/tests/baselines/reference/classExtendingClass.types @@ -14,7 +14,7 @@ class C { class D extends C { >D : D ->C : typeof C +>C : C bar: string; >bar : string @@ -73,7 +73,7 @@ class C2 { class D2 extends C2 { >D2 : D2 >T : T ->C2 : typeof C2 +>C2 : C2 >T : T bar: string; diff --git a/tests/baselines/reference/classExtendingQualifiedName2.types b/tests/baselines/reference/classExtendingQualifiedName2.types index 35a41203c0d..bd50fe3d2ce 100644 --- a/tests/baselines/reference/classExtendingQualifiedName2.types +++ b/tests/baselines/reference/classExtendingQualifiedName2.types @@ -8,7 +8,7 @@ module M { class D extends M.C { >D : D ->M.C : typeof C +>M.C : C >M : typeof M >C : typeof C } diff --git a/tests/baselines/reference/classImplementsClass3.types b/tests/baselines/reference/classImplementsClass3.types index 0d8696721c1..6f97a96a56e 100644 --- a/tests/baselines/reference/classImplementsClass3.types +++ b/tests/baselines/reference/classImplementsClass3.types @@ -18,7 +18,7 @@ class C implements A { class C2 extends A {} >C2 : C2 ->A : typeof A +>A : A // no errors var c: C; diff --git a/tests/baselines/reference/classOrder2.types b/tests/baselines/reference/classOrder2.types index 82422dda46f..07bd6ba45a5 100644 --- a/tests/baselines/reference/classOrder2.types +++ b/tests/baselines/reference/classOrder2.types @@ -2,7 +2,7 @@ class A extends B { >A : A ->B : typeof B +>B : B foo() { this.bar(); } >foo : () => void diff --git a/tests/baselines/reference/classOrderBug.types b/tests/baselines/reference/classOrderBug.types index c30836e661f..979b65b8008 100644 --- a/tests/baselines/reference/classOrderBug.types +++ b/tests/baselines/reference/classOrderBug.types @@ -25,7 +25,7 @@ class baz {} class foo extends baz {} >foo : foo ->baz : typeof baz +>baz : baz diff --git a/tests/baselines/reference/classSideInheritance2.types b/tests/baselines/reference/classSideInheritance2.types index 90f3b794814..9c2d632ebbb 100644 --- a/tests/baselines/reference/classSideInheritance2.types +++ b/tests/baselines/reference/classSideInheritance2.types @@ -11,7 +11,7 @@ interface TextSpan {} class SubText extends TextBase { >SubText : SubText ->TextBase : typeof TextBase +>TextBase : TextBase constructor(text: IText, span: TextSpan) { >text : IText diff --git a/tests/baselines/reference/classWithProtectedProperty.types b/tests/baselines/reference/classWithProtectedProperty.types index b3e3afc2736..1f53ea2aad9 100644 --- a/tests/baselines/reference/classWithProtectedProperty.types +++ b/tests/baselines/reference/classWithProtectedProperty.types @@ -39,7 +39,7 @@ class C { class D extends C { >D : D ->C : typeof C +>C : C method() { >method : () => void diff --git a/tests/baselines/reference/commentOnAmbientClass1.types b/tests/baselines/reference/commentOnAmbientClass1.types index 28b0c7e19fe..44c0334ef6c 100644 --- a/tests/baselines/reference/commentOnAmbientClass1.types +++ b/tests/baselines/reference/commentOnAmbientClass1.types @@ -2,7 +2,7 @@ /// declare class E extends C { >E : E ->C : typeof C +>C : C } === tests/cases/compiler/a.ts === /*! Keep this pinned comment */ diff --git a/tests/baselines/reference/commentOnAmbientModule.types b/tests/baselines/reference/commentOnAmbientModule.types index f64845cae5d..629395a4e80 100644 --- a/tests/baselines/reference/commentOnAmbientModule.types +++ b/tests/baselines/reference/commentOnAmbientModule.types @@ -5,7 +5,7 @@ declare module E { class foobar extends D.bar { >foobar : foobar ->D.bar : typeof D.bar +>D.bar : D.bar >D : typeof D >bar : typeof D.bar diff --git a/tests/baselines/reference/commentsInheritance.types b/tests/baselines/reference/commentsInheritance.types index b6778ca40fc..1c25f13937b 100644 --- a/tests/baselines/reference/commentsInheritance.types +++ b/tests/baselines/reference/commentsInheritance.types @@ -177,7 +177,7 @@ class c2 { } class c3 extends c2 { >c3 : c3 ->c2 : typeof c2 +>c2 : c2 constructor() { super(10); @@ -232,7 +232,7 @@ c2_i = c3_i; class c4 extends c2 { >c4 : c4 ->c2 : typeof c2 +>c2 : c2 } var c4_i = new c4(10); >c4_i : c4 diff --git a/tests/baselines/reference/comparisonOperatorWithIdenticalObjects.types b/tests/baselines/reference/comparisonOperatorWithIdenticalObjects.types index adf4b2a1d13..7f202c38d3a 100644 --- a/tests/baselines/reference/comparisonOperatorWithIdenticalObjects.types +++ b/tests/baselines/reference/comparisonOperatorWithIdenticalObjects.types @@ -70,11 +70,11 @@ class Base { } class A2 extends Base { } >A2 : A2 ->Base : typeof Base +>Base : Base class B2 extends Base { } >B2 : B2 ->Base : typeof Base +>Base : Base interface A3 { f(a: number): string; } >A3 : A3 diff --git a/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnCallSignature.types b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnCallSignature.types index b6425439a20..b3a972958b3 100644 --- a/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnCallSignature.types +++ b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnCallSignature.types @@ -8,7 +8,7 @@ class Base { class Derived extends Base { >Derived : Derived ->Base : typeof Base +>Base : Base public b: string; >b : string diff --git a/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnConstructorSignature.types b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnConstructorSignature.types index 0afc38dba26..737c13f183c 100644 --- a/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnConstructorSignature.types +++ b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnConstructorSignature.types @@ -8,7 +8,7 @@ class Base { class Derived extends Base { >Derived : Derived ->Base : typeof Base +>Base : Base public b: string; >b : string diff --git a/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnIndexSignature.types b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnIndexSignature.types index 00bb5611a56..657fdccbda0 100644 --- a/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnIndexSignature.types +++ b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnIndexSignature.types @@ -8,7 +8,7 @@ class Base { class Derived extends Base { >Derived : Derived ->Base : typeof Base +>Base : Base public b: string; >b : string diff --git a/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnInstantiatedCallSignature.types b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnInstantiatedCallSignature.types index 7d612407d51..c3f0d96e839 100644 --- a/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnInstantiatedCallSignature.types +++ b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnInstantiatedCallSignature.types @@ -8,7 +8,7 @@ class Base { class Derived extends Base { >Derived : Derived ->Base : typeof Base +>Base : Base public b: string; >b : string diff --git a/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnInstantiatedConstructorSignature.types b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnInstantiatedConstructorSignature.types index 0c6ea7c0d9f..29d92c25726 100644 --- a/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnInstantiatedConstructorSignature.types +++ b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnInstantiatedConstructorSignature.types @@ -8,7 +8,7 @@ class Base { class Derived extends Base { >Derived : Derived ->Base : typeof Base +>Base : Base public b: string; >b : string diff --git a/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnProperty.types b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnProperty.types index efcf6a3ff5d..d604115e161 100644 --- a/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnProperty.types +++ b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnProperty.types @@ -8,7 +8,7 @@ class Base { class Derived extends Base { >Derived : Derived ->Base : typeof Base +>Base : Base public b: string; >b : string @@ -47,7 +47,7 @@ class A2 { class B2 extends A2 { >B2 : B2 ->A2 : typeof A2 +>A2 : A2 private b; >b : any diff --git a/tests/baselines/reference/complexClassRelationships.types b/tests/baselines/reference/complexClassRelationships.types index 5c86d8eba2b..43d0232e30a 100644 --- a/tests/baselines/reference/complexClassRelationships.types +++ b/tests/baselines/reference/complexClassRelationships.types @@ -2,7 +2,7 @@ // There should be no errors in this file class Derived extends Base { >Derived : Derived ->Base : typeof Base +>Base : Base public static createEmpty(): Derived { >createEmpty : () => Derived diff --git a/tests/baselines/reference/computedPropertyNames25_ES5.types b/tests/baselines/reference/computedPropertyNames25_ES5.types index f1f4239085c..6ca67cce410 100644 --- a/tests/baselines/reference/computedPropertyNames25_ES5.types +++ b/tests/baselines/reference/computedPropertyNames25_ES5.types @@ -11,7 +11,7 @@ class Base { } class C extends Base { >C : C ->Base : typeof Base +>Base : Base foo() { >foo : () => number diff --git a/tests/baselines/reference/computedPropertyNames25_ES6.types b/tests/baselines/reference/computedPropertyNames25_ES6.types index 50a1a299381..1c093ebc59f 100644 --- a/tests/baselines/reference/computedPropertyNames25_ES6.types +++ b/tests/baselines/reference/computedPropertyNames25_ES6.types @@ -11,7 +11,7 @@ class Base { } class C extends Base { >C : C ->Base : typeof Base +>Base : Base foo() { >foo : () => number diff --git a/tests/baselines/reference/computedPropertyNames28_ES5.types b/tests/baselines/reference/computedPropertyNames28_ES5.types index 1457903edf7..273dcd426d8 100644 --- a/tests/baselines/reference/computedPropertyNames28_ES5.types +++ b/tests/baselines/reference/computedPropertyNames28_ES5.types @@ -4,7 +4,7 @@ class Base { } class C extends Base { >C : C ->Base : typeof Base +>Base : Base constructor() { super(); diff --git a/tests/baselines/reference/computedPropertyNames28_ES6.types b/tests/baselines/reference/computedPropertyNames28_ES6.types index dd1840fe5ef..a34fb33f6c7 100644 --- a/tests/baselines/reference/computedPropertyNames28_ES6.types +++ b/tests/baselines/reference/computedPropertyNames28_ES6.types @@ -4,7 +4,7 @@ class Base { } class C extends Base { >C : C ->Base : typeof Base +>Base : Base constructor() { super(); diff --git a/tests/baselines/reference/computedPropertyNames31_ES5.types b/tests/baselines/reference/computedPropertyNames31_ES5.types index 063b98141ba..6c0f2572a06 100644 --- a/tests/baselines/reference/computedPropertyNames31_ES5.types +++ b/tests/baselines/reference/computedPropertyNames31_ES5.types @@ -11,7 +11,7 @@ class Base { } class C extends Base { >C : C ->Base : typeof Base +>Base : Base foo() { >foo : () => number diff --git a/tests/baselines/reference/computedPropertyNames31_ES6.types b/tests/baselines/reference/computedPropertyNames31_ES6.types index b99d364bb3d..eaddc036812 100644 --- a/tests/baselines/reference/computedPropertyNames31_ES6.types +++ b/tests/baselines/reference/computedPropertyNames31_ES6.types @@ -11,7 +11,7 @@ class Base { } class C extends Base { >C : C ->Base : typeof Base +>Base : Base foo() { >foo : () => number diff --git a/tests/baselines/reference/conditionalOperatorWithIdenticalBCT.types b/tests/baselines/reference/conditionalOperatorWithIdenticalBCT.types index 68745ed7874..722ec13c684 100644 --- a/tests/baselines/reference/conditionalOperatorWithIdenticalBCT.types +++ b/tests/baselines/reference/conditionalOperatorWithIdenticalBCT.types @@ -8,12 +8,12 @@ class X { propertyX: any; propertyX1: number; propertyX2: string }; class A extends X { propertyA: number }; >A : A ->X : typeof X +>X : X >propertyA : number class B extends X { propertyB: string }; >B : B ->X : typeof X +>X : X >propertyB : string var x: X; diff --git a/tests/baselines/reference/constantOverloadFunction.types b/tests/baselines/reference/constantOverloadFunction.types index 18de11823db..d643d3a726d 100644 --- a/tests/baselines/reference/constantOverloadFunction.types +++ b/tests/baselines/reference/constantOverloadFunction.types @@ -5,17 +5,17 @@ class Base { foo() { } } class Derived1 extends Base { bar() { } } >Derived1 : Derived1 ->Base : typeof Base +>Base : Base >bar : () => void class Derived2 extends Base { baz() { } } >Derived2 : Derived2 ->Base : typeof Base +>Base : Base >baz : () => void class Derived3 extends Base { biz() { } } >Derived3 : Derived3 ->Base : typeof Base +>Base : Base >biz : () => void function foo(tagName: 'canvas'): Derived1; diff --git a/tests/baselines/reference/constraintCheckInGenericBaseTypeReference.types b/tests/baselines/reference/constraintCheckInGenericBaseTypeReference.types index 602ad444a5c..6fd80b779c5 100644 --- a/tests/baselines/reference/constraintCheckInGenericBaseTypeReference.types +++ b/tests/baselines/reference/constraintCheckInGenericBaseTypeReference.types @@ -16,7 +16,7 @@ class GenericBase { } class Derived extends GenericBase { >Derived : Derived ->GenericBase : typeof GenericBase +>GenericBase : GenericBase >TypeArg : TypeArg } diff --git a/tests/baselines/reference/constructSignatureAssignabilityInInheritance2.types b/tests/baselines/reference/constructSignatureAssignabilityInInheritance2.types index 7b24ecdab19..7ab221024ca 100644 --- a/tests/baselines/reference/constructSignatureAssignabilityInInheritance2.types +++ b/tests/baselines/reference/constructSignatureAssignabilityInInheritance2.types @@ -7,17 +7,17 @@ class Base { foo: string; } class Derived extends Base { bar: string; } >Derived : Derived ->Base : typeof Base +>Base : Base >bar : string class Derived2 extends Derived { baz: string; } >Derived2 : Derived2 ->Derived : typeof Derived +>Derived : Derived >baz : string class OtherDerived extends Base { bing: string; } >OtherDerived : OtherDerived ->Base : typeof Base +>Base : Base >bing : string interface A { // T diff --git a/tests/baselines/reference/constructSignatureAssignabilityInInheritance4.types b/tests/baselines/reference/constructSignatureAssignabilityInInheritance4.types index d0f28468df4..7782389d69a 100644 --- a/tests/baselines/reference/constructSignatureAssignabilityInInheritance4.types +++ b/tests/baselines/reference/constructSignatureAssignabilityInInheritance4.types @@ -7,17 +7,17 @@ class Base { foo: string; } class Derived extends Base { bar: string; } >Derived : Derived ->Base : typeof Base +>Base : Base >bar : string class Derived2 extends Derived { baz: string; } >Derived2 : Derived2 ->Derived : typeof Derived +>Derived : Derived >baz : string class OtherDerived extends Base { bing: string; } >OtherDerived : OtherDerived ->Base : typeof Base +>Base : Base >bing : string interface A { // T diff --git a/tests/baselines/reference/constructSignatureAssignabilityInInheritance5.types b/tests/baselines/reference/constructSignatureAssignabilityInInheritance5.types index 417ad4bba09..dea9478b372 100644 --- a/tests/baselines/reference/constructSignatureAssignabilityInInheritance5.types +++ b/tests/baselines/reference/constructSignatureAssignabilityInInheritance5.types @@ -8,17 +8,17 @@ class Base { foo: string; } class Derived extends Base { bar: string; } >Derived : Derived ->Base : typeof Base +>Base : Base >bar : string class Derived2 extends Derived { baz: string; } >Derived2 : Derived2 ->Derived : typeof Derived +>Derived : Derived >baz : string class OtherDerived extends Base { bing: string; } >OtherDerived : OtherDerived ->Base : typeof Base +>Base : Base >bing : string interface A { // T diff --git a/tests/baselines/reference/constructSignatureAssignabilityInInheritance6.types b/tests/baselines/reference/constructSignatureAssignabilityInInheritance6.types index 9fa64f6baad..193a19a5f2c 100644 --- a/tests/baselines/reference/constructSignatureAssignabilityInInheritance6.types +++ b/tests/baselines/reference/constructSignatureAssignabilityInInheritance6.types @@ -9,17 +9,17 @@ class Base { foo: string; } class Derived extends Base { bar: string; } >Derived : Derived ->Base : typeof Base +>Base : Base >bar : string class Derived2 extends Derived { baz: string; } >Derived2 : Derived2 ->Derived : typeof Derived +>Derived : Derived >baz : string class OtherDerived extends Base { bing: string; } >OtherDerived : OtherDerived ->Base : typeof Base +>Base : Base >bing : string interface A { // T diff --git a/tests/baselines/reference/constructorArgs.types b/tests/baselines/reference/constructorArgs.types index 5c0b3e78d7b..ccd23c22f5d 100644 --- a/tests/baselines/reference/constructorArgs.types +++ b/tests/baselines/reference/constructorArgs.types @@ -16,7 +16,7 @@ class Super { class Sub extends Super { >Sub : Sub ->Super : typeof Super +>Super : Super constructor(public options:Options) { >options : Options diff --git a/tests/baselines/reference/constructorFunctionTypeIsAssignableToBaseType.types b/tests/baselines/reference/constructorFunctionTypeIsAssignableToBaseType.types index 89f1662a9df..3702be4f2dc 100644 --- a/tests/baselines/reference/constructorFunctionTypeIsAssignableToBaseType.types +++ b/tests/baselines/reference/constructorFunctionTypeIsAssignableToBaseType.types @@ -13,7 +13,7 @@ class Base { class Derived extends Base { >Derived : Derived ->Base : typeof Base +>Base : Base // ok static foo: { @@ -26,7 +26,7 @@ class Derived extends Base { class Derived2 extends Base { >Derived2 : Derived2 ->Base : typeof Base +>Base : Base // ok, use assignability here static foo: { diff --git a/tests/baselines/reference/constructorFunctionTypeIsAssignableToBaseType2.types b/tests/baselines/reference/constructorFunctionTypeIsAssignableToBaseType2.types index 39dac2804e0..e0e86df4a26 100644 --- a/tests/baselines/reference/constructorFunctionTypeIsAssignableToBaseType2.types +++ b/tests/baselines/reference/constructorFunctionTypeIsAssignableToBaseType2.types @@ -19,7 +19,7 @@ class Base { class Derived extends Base { >Derived : Derived ->Base : typeof Base +>Base : Base // ok static foo: { @@ -41,7 +41,7 @@ class Derived extends Base { class Derived2 extends Base { >Derived2 : Derived2 ->Base : typeof Base +>Base : Base static foo: { >foo : { bar: number; } diff --git a/tests/baselines/reference/constructorHasPrototypeProperty.types b/tests/baselines/reference/constructorHasPrototypeProperty.types index b8d1265f504..24dedb254eb 100644 --- a/tests/baselines/reference/constructorHasPrototypeProperty.types +++ b/tests/baselines/reference/constructorHasPrototypeProperty.types @@ -11,7 +11,7 @@ module NonGeneric { class D extends C { >D : D ->C : typeof C +>C : C bar: string; >bar : string @@ -61,7 +61,7 @@ module Generic { >D : D >T : T >U : U ->C : typeof C +>C : C >T : T >U : U diff --git a/tests/baselines/reference/constructorOverloads2.types b/tests/baselines/reference/constructorOverloads2.types index 27e16d1fd46..dde032c0fd2 100644 --- a/tests/baselines/reference/constructorOverloads2.types +++ b/tests/baselines/reference/constructorOverloads2.types @@ -17,7 +17,7 @@ class FooBase { class Foo extends FooBase { >Foo : Foo ->FooBase : typeof FooBase +>FooBase : FooBase constructor(s: string); >s : string diff --git a/tests/baselines/reference/contextualTypingArrayOfLambdas.types b/tests/baselines/reference/contextualTypingArrayOfLambdas.types index 08259aaa36c..d3e5b9942e3 100644 --- a/tests/baselines/reference/contextualTypingArrayOfLambdas.types +++ b/tests/baselines/reference/contextualTypingArrayOfLambdas.types @@ -8,7 +8,7 @@ class A { class B extends A { >B : B ->A : typeof A +>A : A bar: string; >bar : string @@ -16,7 +16,7 @@ class B extends A { class C extends A { >C : C ->A : typeof A +>A : A baz: string; >baz : string diff --git a/tests/baselines/reference/contextualTypingOfConditionalExpression.types b/tests/baselines/reference/contextualTypingOfConditionalExpression.types index b12b40022f2..a2e29a0e66b 100644 --- a/tests/baselines/reference/contextualTypingOfConditionalExpression.types +++ b/tests/baselines/reference/contextualTypingOfConditionalExpression.types @@ -25,14 +25,14 @@ class A { } class B extends A { >B : B ->A : typeof A +>A : A bar: number; >bar : number } class C extends A { >C : C ->A : typeof A +>A : A baz: number; >baz : number diff --git a/tests/baselines/reference/declFileAliasUseBeforeDeclaration2.types b/tests/baselines/reference/declFileAliasUseBeforeDeclaration2.types index 15073c3eb01..362dd031e09 100644 --- a/tests/baselines/reference/declFileAliasUseBeforeDeclaration2.types +++ b/tests/baselines/reference/declFileAliasUseBeforeDeclaration2.types @@ -10,7 +10,7 @@ declare module "test" { } class B extends E { >B : B ->E : typeof E +>E : E } import E = A.C; >E : typeof E diff --git a/tests/baselines/reference/declFileForFunctionTypeAsTypeParameter.types b/tests/baselines/reference/declFileForFunctionTypeAsTypeParameter.types index 508deef385d..ba203e39aab 100644 --- a/tests/baselines/reference/declFileForFunctionTypeAsTypeParameter.types +++ b/tests/baselines/reference/declFileForFunctionTypeAsTypeParameter.types @@ -6,7 +6,7 @@ class X { } class C extends X<() => number> { >C : C ->X : typeof X +>X : X<() => number> } interface I extends X<() => number> { >I : I diff --git a/tests/baselines/reference/declFileGenericClassWithGenericExtendedClass.types b/tests/baselines/reference/declFileGenericClassWithGenericExtendedClass.types index 7cef23491ae..27fed37c21b 100644 --- a/tests/baselines/reference/declFileGenericClassWithGenericExtendedClass.types +++ b/tests/baselines/reference/declFileGenericClassWithGenericExtendedClass.types @@ -13,7 +13,7 @@ class Base { } class Derived extends Base { } >Derived : Derived >T : T ->Base : typeof Base +>Base : Base >T : T interface IBar { diff --git a/tests/baselines/reference/declFileGenericType.types b/tests/baselines/reference/declFileGenericType.types index 71c65ab0c10..310f812a7bb 100644 --- a/tests/baselines/reference/declFileGenericType.types +++ b/tests/baselines/reference/declFileGenericType.types @@ -153,7 +153,7 @@ export var g = C.F5>(); export class h extends C.A{ } >h : h ->C.A : typeof C.A +>C.A : C.A >C : typeof C >A : typeof C.A >C : any diff --git a/tests/baselines/reference/declFileGenericType2.types b/tests/baselines/reference/declFileGenericType2.types index d14915fcad4..07bcba3e85a 100644 --- a/tests/baselines/reference/declFileGenericType2.types +++ b/tests/baselines/reference/declFileGenericType2.types @@ -86,7 +86,7 @@ module templa.dom.mvc { >templa : any >mvc : any >IModel : templa.mvc.IModel ->templa.mvc.AbstractController : typeof templa.mvc.AbstractController +>templa.mvc.AbstractController : templa.mvc.AbstractController >templa.mvc : typeof templa.mvc >templa : typeof templa >mvc : typeof templa.mvc @@ -116,7 +116,7 @@ module templa.dom.mvc.composite { >mvc : any >composite : any >ICompositeControllerModel : templa.mvc.composite.ICompositeControllerModel ->templa.dom.mvc.AbstractElementController : typeof AbstractElementController +>templa.dom.mvc.AbstractElementController : AbstractElementController >templa.dom.mvc : typeof mvc >templa.dom : typeof dom >templa : typeof templa diff --git a/tests/baselines/reference/declFileWithClassNameConflictingWithClassReferredByExtendsClause.types b/tests/baselines/reference/declFileWithClassNameConflictingWithClassReferredByExtendsClause.types index bec86debf3a..f032ad29b11 100644 --- a/tests/baselines/reference/declFileWithClassNameConflictingWithClassReferredByExtendsClause.types +++ b/tests/baselines/reference/declFileWithClassNameConflictingWithClassReferredByExtendsClause.types @@ -19,7 +19,7 @@ module X.Y.base { export class W extends A.B.Base.W { >W : W ->A.B.Base.W : typeof A.B.Base.W +>A.B.Base.W : A.B.Base.W >A.B.Base : typeof A.B.Base >A.B : typeof A.B >A : typeof A @@ -41,7 +41,7 @@ module X.Y.base.Z { export class W extends X.Y.base.W { >W : W >TValue : TValue ->X.Y.base.W : typeof base.W +>X.Y.base.W : base.W >X.Y.base : typeof base >X.Y : typeof Y >X : typeof X diff --git a/tests/baselines/reference/declFileWithExtendsClauseThatHasItsContainerNameConflict.types b/tests/baselines/reference/declFileWithExtendsClauseThatHasItsContainerNameConflict.types index f5918630a4c..4dae0d42c53 100644 --- a/tests/baselines/reference/declFileWithExtendsClauseThatHasItsContainerNameConflict.types +++ b/tests/baselines/reference/declFileWithExtendsClauseThatHasItsContainerNameConflict.types @@ -30,7 +30,7 @@ module A.B.C { export class ContextMenu extends EventManager { >ContextMenu : ContextMenu ->EventManager : typeof EventManager +>EventManager : EventManager name: string; >name : string diff --git a/tests/baselines/reference/declarationEmit_nameConflicts3.types b/tests/baselines/reference/declarationEmit_nameConflicts3.types index 5f2e32120b7..8d52bda68f5 100644 --- a/tests/baselines/reference/declarationEmit_nameConflicts3.types +++ b/tests/baselines/reference/declarationEmit_nameConflicts3.types @@ -37,7 +37,7 @@ module M.P { } export class E extends C { } >E : E ->C : typeof C +>C : C export enum D { >D : D diff --git a/tests/baselines/reference/declarationEmit_protectedMembers.types b/tests/baselines/reference/declarationEmit_protectedMembers.types index c3f191f9247..89aa3f56332 100644 --- a/tests/baselines/reference/declarationEmit_protectedMembers.types +++ b/tests/baselines/reference/declarationEmit_protectedMembers.types @@ -48,7 +48,7 @@ class C1 { // Derived class overriding protected members class C2 extends C1 { >C2 : C2 ->C1 : typeof C1 +>C1 : C1 protected f() { >f : () => number @@ -81,7 +81,7 @@ class C2 extends C1 { // Derived class making protected members public class C3 extends C2 { >C3 : C3 ->C2 : typeof C2 +>C2 : C2 x: number; >x : number diff --git a/tests/baselines/reference/declareDottedExtend.types b/tests/baselines/reference/declareDottedExtend.types index 10380d0b864..1c6c48c85c9 100644 --- a/tests/baselines/reference/declareDottedExtend.types +++ b/tests/baselines/reference/declareDottedExtend.types @@ -14,13 +14,13 @@ import ab = A.B; class D extends ab.C{ } >D : D ->ab.C : typeof ab.C +>ab.C : ab.C >ab : typeof ab >C : typeof ab.C class E extends A.B.C{ } >E : E ->A.B.C : typeof ab.C +>A.B.C : ab.C >A.B : typeof ab >A : typeof A >B : typeof ab diff --git a/tests/baselines/reference/derivedClassOverridesIndexersWithAssignmentCompatibility.types b/tests/baselines/reference/derivedClassOverridesIndexersWithAssignmentCompatibility.types index fa60f03d295..97940edc6e7 100644 --- a/tests/baselines/reference/derivedClassOverridesIndexersWithAssignmentCompatibility.types +++ b/tests/baselines/reference/derivedClassOverridesIndexersWithAssignmentCompatibility.types @@ -10,7 +10,7 @@ class Base { // ok, use assignment compatibility class Derived extends Base { >Derived : Derived ->Base : typeof Base +>Base : Base [x: string]: any; >x : string @@ -27,7 +27,7 @@ class Base2 { // ok, use assignment compatibility class Derived2 extends Base2 { >Derived2 : Derived2 ->Base2 : typeof Base2 +>Base2 : Base2 [x: number]: any; >x : number diff --git a/tests/baselines/reference/derivedClassOverridesProtectedMembers.types b/tests/baselines/reference/derivedClassOverridesProtectedMembers.types index 1e672636d14..2695cbabe34 100644 --- a/tests/baselines/reference/derivedClassOverridesProtectedMembers.types +++ b/tests/baselines/reference/derivedClassOverridesProtectedMembers.types @@ -65,7 +65,7 @@ class Base { class Derived extends Base { >Derived : Derived ->Base : typeof Base +>Base : Base protected a: typeof y; >a : { foo: string; bar: string; } diff --git a/tests/baselines/reference/derivedClassOverridesProtectedMembers2.types b/tests/baselines/reference/derivedClassOverridesProtectedMembers2.types index b99be02adab..2799555a3a2 100644 --- a/tests/baselines/reference/derivedClassOverridesProtectedMembers2.types +++ b/tests/baselines/reference/derivedClassOverridesProtectedMembers2.types @@ -65,7 +65,7 @@ constructor(a: typeof x) { } // Increase visibility of all protected members to public class Derived extends Base { >Derived : Derived ->Base : typeof Base +>Base : Base a: typeof y; >a : { foo: string; bar: string; } @@ -208,7 +208,7 @@ class Base2 { class Derived2 extends Base2 { >Derived2 : Derived2 ->Base2 : typeof Base2 +>Base2 : Base2 [i: string]: typeof x; >i : string diff --git a/tests/baselines/reference/derivedClassOverridesWithoutSubtype.types b/tests/baselines/reference/derivedClassOverridesWithoutSubtype.types index d46039d8508..a46c8efa408 100644 --- a/tests/baselines/reference/derivedClassOverridesWithoutSubtype.types +++ b/tests/baselines/reference/derivedClassOverridesWithoutSubtype.types @@ -12,7 +12,7 @@ class Base { class Derived extends Base { >Derived : Derived ->Base : typeof Base +>Base : Base x: { >x : { foo: any; } @@ -35,7 +35,7 @@ class Base2 { class Derived2 extends Base2 { >Derived2 : Derived2 ->Base2 : typeof Base2 +>Base2 : Base2 static y: { >y : { foo: any; } diff --git a/tests/baselines/reference/derivedClasses.types b/tests/baselines/reference/derivedClasses.types index 5cabca32463..906cfb2741c 100644 --- a/tests/baselines/reference/derivedClasses.types +++ b/tests/baselines/reference/derivedClasses.types @@ -1,7 +1,7 @@ === tests/cases/compiler/derivedClasses.ts === class Red extends Color { >Red : Red ->Color : typeof Color +>Color : Color public shade() { >shade : () => string @@ -36,7 +36,7 @@ class Color { class Blue extends Color { >Blue : Blue ->Color : typeof Color +>Color : Color public shade() { >shade : () => string diff --git a/tests/baselines/reference/derivedTypeAccessesHiddenBaseCallViaSuperPropertyAccess.types b/tests/baselines/reference/derivedTypeAccessesHiddenBaseCallViaSuperPropertyAccess.types index 8421e6a0820..d8d9f657255 100644 --- a/tests/baselines/reference/derivedTypeAccessesHiddenBaseCallViaSuperPropertyAccess.types +++ b/tests/baselines/reference/derivedTypeAccessesHiddenBaseCallViaSuperPropertyAccess.types @@ -15,7 +15,7 @@ class Base { class Derived extends Base { >Derived : Derived ->Base : typeof Base +>Base : Base foo(x: { a: number; b: number }): { a: number; b: number } { >foo : (x: { a: number; b: number; }) => { a: number; b: number; } diff --git a/tests/baselines/reference/derivedTypeDoesNotRequireExtendsClause.types b/tests/baselines/reference/derivedTypeDoesNotRequireExtendsClause.types index f34220eda8f..36b85d7950c 100644 --- a/tests/baselines/reference/derivedTypeDoesNotRequireExtendsClause.types +++ b/tests/baselines/reference/derivedTypeDoesNotRequireExtendsClause.types @@ -18,7 +18,7 @@ class Derived { class Derived2 extends Base { >Derived2 : Derived2 ->Base : typeof Base +>Base : Base bar: string; >bar : string diff --git a/tests/baselines/reference/emitClassDeclarationWithExtensionAndTypeArgumentInES6.types b/tests/baselines/reference/emitClassDeclarationWithExtensionAndTypeArgumentInES6.types index eba51d0997d..e469a377985 100644 --- a/tests/baselines/reference/emitClassDeclarationWithExtensionAndTypeArgumentInES6.types +++ b/tests/baselines/reference/emitClassDeclarationWithExtensionAndTypeArgumentInES6.types @@ -9,11 +9,11 @@ class B { } class C extends B { } >C : C ->B : typeof B +>B : B class D extends B { >D : D ->B : typeof B +>B : B constructor(a: any) >a : any diff --git a/tests/baselines/reference/emitClassDeclarationWithExtensionInES6.types b/tests/baselines/reference/emitClassDeclarationWithExtensionInES6.types index 073e4ebf5ec..7267af2fde0 100644 --- a/tests/baselines/reference/emitClassDeclarationWithExtensionInES6.types +++ b/tests/baselines/reference/emitClassDeclarationWithExtensionInES6.types @@ -10,7 +10,7 @@ class B { } class C extends B { >C : C ->B : typeof B +>B : B foo() { } >foo : () => void @@ -31,7 +31,7 @@ class C extends B { } class D extends C { >D : D ->C : typeof C +>C : C constructor() { super(); diff --git a/tests/baselines/reference/emitClassDeclarationWithPropertyAssignmentInES6.types b/tests/baselines/reference/emitClassDeclarationWithPropertyAssignmentInES6.types index 8157c2243a5..f3504d655ed 100644 --- a/tests/baselines/reference/emitClassDeclarationWithPropertyAssignmentInES6.types +++ b/tests/baselines/reference/emitClassDeclarationWithPropertyAssignmentInES6.types @@ -29,7 +29,7 @@ class D { class E extends D{ >E : E ->D : typeof D +>D : D z: boolean = true; >z : boolean @@ -38,7 +38,7 @@ class E extends D{ class F extends D{ >F : F ->D : typeof D +>D : D z: boolean = true; >z : boolean diff --git a/tests/baselines/reference/emitClassDeclarationWithSuperMethodCall01.types b/tests/baselines/reference/emitClassDeclarationWithSuperMethodCall01.types index a61c40696fc..8b68af897ac 100644 --- a/tests/baselines/reference/emitClassDeclarationWithSuperMethodCall01.types +++ b/tests/baselines/reference/emitClassDeclarationWithSuperMethodCall01.types @@ -10,7 +10,7 @@ class Parent { class Foo extends Parent { >Foo : Foo ->Parent : typeof Parent +>Parent : Parent foo() { >foo : () => void diff --git a/tests/baselines/reference/es6ClassSuperCodegenBug.types b/tests/baselines/reference/es6ClassSuperCodegenBug.types index 09b79d345b5..bdf8ebde8f2 100644 --- a/tests/baselines/reference/es6ClassSuperCodegenBug.types +++ b/tests/baselines/reference/es6ClassSuperCodegenBug.types @@ -8,7 +8,7 @@ class A { } class B extends A { >B : B ->A : typeof A +>A : A constructor() { if (true) { diff --git a/tests/baselines/reference/es6ClassTest7.types b/tests/baselines/reference/es6ClassTest7.types index 83f03ed4076..c0399204ffa 100644 --- a/tests/baselines/reference/es6ClassTest7.types +++ b/tests/baselines/reference/es6ClassTest7.types @@ -9,7 +9,7 @@ declare module M { class Bar extends M.Foo { >Bar : Bar ->M.Foo : typeof M.Foo +>M.Foo : M.Foo >M : typeof M >Foo : typeof M.Foo } diff --git a/tests/baselines/reference/exportAssignmentOfGenericType1.types b/tests/baselines/reference/exportAssignmentOfGenericType1.types index e06b4fb527a..06ff38b2623 100644 --- a/tests/baselines/reference/exportAssignmentOfGenericType1.types +++ b/tests/baselines/reference/exportAssignmentOfGenericType1.types @@ -5,7 +5,7 @@ import q = require("exportAssignmentOfGenericType1_0"); class M extends q { } >M : M ->q : typeof q +>q : q var m: M; >m : M diff --git a/tests/baselines/reference/extBaseClass1.types b/tests/baselines/reference/extBaseClass1.types index a2c5d5a6bc6..1ab2ec3ba53 100644 --- a/tests/baselines/reference/extBaseClass1.types +++ b/tests/baselines/reference/extBaseClass1.types @@ -12,7 +12,7 @@ module M { export class C extends B { >C : C ->B : typeof B +>B : B } } @@ -21,7 +21,7 @@ module M { export class C2 extends B { >C2 : C2 ->B : typeof B +>B : B } } @@ -30,7 +30,7 @@ module N { export class C3 extends M.B { >C3 : C3 ->M.B : typeof M.B +>M.B : M.B >M : typeof M >B : typeof M.B } diff --git a/tests/baselines/reference/extendAndImplementTheSameBaseType.types b/tests/baselines/reference/extendAndImplementTheSameBaseType.types index da14105f398..136308b3887 100644 --- a/tests/baselines/reference/extendAndImplementTheSameBaseType.types +++ b/tests/baselines/reference/extendAndImplementTheSameBaseType.types @@ -10,7 +10,7 @@ class C { } class D extends C implements C { >D : D ->C : typeof C +>C : C >C : C baz() { } diff --git a/tests/baselines/reference/extendBaseClassBeforeItsDeclared.types b/tests/baselines/reference/extendBaseClassBeforeItsDeclared.types index b386e494bd7..a9ad130d474 100644 --- a/tests/baselines/reference/extendBaseClassBeforeItsDeclared.types +++ b/tests/baselines/reference/extendBaseClassBeforeItsDeclared.types @@ -1,7 +1,7 @@ === tests/cases/compiler/extendBaseClassBeforeItsDeclared.ts === class derived extends base { } >derived : derived ->base : typeof base +>base : base class base { constructor (public n: number) { } } >base : base diff --git a/tests/baselines/reference/extendNonClassSymbol1.types b/tests/baselines/reference/extendNonClassSymbol1.types index 1c627656ce0..72ae7b4566c 100644 --- a/tests/baselines/reference/extendNonClassSymbol1.types +++ b/tests/baselines/reference/extendNonClassSymbol1.types @@ -9,5 +9,5 @@ var x = A; class C extends x { } // error, could not find symbol xs >C : C ->x : typeof A +>x : A diff --git a/tests/baselines/reference/extendingClassFromAliasAndUsageInIndexer.types b/tests/baselines/reference/extendingClassFromAliasAndUsageInIndexer.types index 8bc97eb26d8..b5323ae5c85 100644 --- a/tests/baselines/reference/extendingClassFromAliasAndUsageInIndexer.types +++ b/tests/baselines/reference/extendingClassFromAliasAndUsageInIndexer.types @@ -61,7 +61,7 @@ import Backbone = require("extendingClassFromAliasAndUsageInIndexer_backbone"); export class VisualizationModel extends Backbone.Model { >VisualizationModel : VisualizationModel ->Backbone.Model : typeof Backbone.Model +>Backbone.Model : Backbone.Model >Backbone : typeof Backbone >Model : typeof Backbone.Model @@ -74,7 +74,7 @@ import Backbone = require("extendingClassFromAliasAndUsageInIndexer_backbone"); export class VisualizationModel extends Backbone.Model { >VisualizationModel : VisualizationModel ->Backbone.Model : typeof Backbone.Model +>Backbone.Model : Backbone.Model >Backbone : typeof Backbone >Model : typeof Backbone.Model diff --git a/tests/baselines/reference/functionImplementations.types b/tests/baselines/reference/functionImplementations.types index 674c111e341..f277821d696 100644 --- a/tests/baselines/reference/functionImplementations.types +++ b/tests/baselines/reference/functionImplementations.types @@ -190,7 +190,7 @@ class Base { private m; } class Derived extends Base { private q; } >Derived : Derived ->Base : typeof Base +>Base : Base >q : any var b: Base; @@ -311,7 +311,7 @@ function f6(): number { class Derived2 extends Base { private r: string; } >Derived2 : Derived2 ->Base : typeof Base +>Base : Base >r : string class AnotherClass { private x } diff --git a/tests/baselines/reference/functionSubtypingOfVarArgs.types b/tests/baselines/reference/functionSubtypingOfVarArgs.types index 48f8b272560..ebd706e94cf 100644 --- a/tests/baselines/reference/functionSubtypingOfVarArgs.types +++ b/tests/baselines/reference/functionSubtypingOfVarArgs.types @@ -24,7 +24,7 @@ class EventBase { class StringEvent extends EventBase { // should work >StringEvent : StringEvent ->EventBase : typeof EventBase +>EventBase : EventBase add(listener: (items: string) => void ) { // valid, items is subtype of args >add : (listener: (items: string) => void) => void diff --git a/tests/baselines/reference/functionSubtypingOfVarArgs2.types b/tests/baselines/reference/functionSubtypingOfVarArgs2.types index e2d344dabca..5e2b14ffc7a 100644 --- a/tests/baselines/reference/functionSubtypingOfVarArgs2.types +++ b/tests/baselines/reference/functionSubtypingOfVarArgs2.types @@ -25,7 +25,7 @@ class EventBase { class StringEvent extends EventBase { >StringEvent : StringEvent ->EventBase : typeof EventBase +>EventBase : EventBase add(listener: (items: string, moreitems: number) => void ) { >add : (listener: (items: string, moreitems: number) => void) => void diff --git a/tests/baselines/reference/generatedContextualTyping.types b/tests/baselines/reference/generatedContextualTyping.types index 9b6a332a63e..e8f434d31a8 100644 --- a/tests/baselines/reference/generatedContextualTyping.types +++ b/tests/baselines/reference/generatedContextualTyping.types @@ -5,12 +5,12 @@ class Base { private p; } class Derived1 extends Base { private m; } >Derived1 : Derived1 ->Base : typeof Base +>Base : Base >m : any class Derived2 extends Base { private n; } >Derived2 : Derived2 ->Base : typeof Base +>Base : Base >n : any interface Genric { func(n: T[]); } diff --git a/tests/baselines/reference/generatorTypeCheck17.types b/tests/baselines/reference/generatorTypeCheck17.types index 2768176c431..0ea7212040b 100644 --- a/tests/baselines/reference/generatorTypeCheck17.types +++ b/tests/baselines/reference/generatorTypeCheck17.types @@ -5,7 +5,7 @@ class Foo { x: number } class Bar extends Foo { y: string } >Bar : Bar ->Foo : typeof Foo +>Foo : Foo >y : string function* g(): IterableIterator { diff --git a/tests/baselines/reference/generatorTypeCheck19.types b/tests/baselines/reference/generatorTypeCheck19.types index 6877934ff0c..2b4f1396c2e 100644 --- a/tests/baselines/reference/generatorTypeCheck19.types +++ b/tests/baselines/reference/generatorTypeCheck19.types @@ -5,7 +5,7 @@ class Foo { x: number } class Bar extends Foo { y: string } >Bar : Bar ->Foo : typeof Foo +>Foo : Foo >y : string function* g(): IterableIterator { diff --git a/tests/baselines/reference/genericBaseClassLiteralProperty.types b/tests/baselines/reference/genericBaseClassLiteralProperty.types index 399e7f603af..87f1c55c42d 100644 --- a/tests/baselines/reference/genericBaseClassLiteralProperty.types +++ b/tests/baselines/reference/genericBaseClassLiteralProperty.types @@ -14,7 +14,7 @@ class BaseClass { class SubClass extends BaseClass { >SubClass : SubClass ->BaseClass : typeof BaseClass +>BaseClass : BaseClass public Error(): void { >Error : () => void diff --git a/tests/baselines/reference/genericBaseClassLiteralProperty2.types b/tests/baselines/reference/genericBaseClassLiteralProperty2.types index db89f73db48..271aa190037 100644 --- a/tests/baselines/reference/genericBaseClassLiteralProperty2.types +++ b/tests/baselines/reference/genericBaseClassLiteralProperty2.types @@ -24,7 +24,7 @@ class BaseCollection2 { class DataView2 extends BaseCollection2 { >DataView2 : DataView2 ->BaseCollection2 : typeof BaseCollection2 +>BaseCollection2 : BaseCollection2 >CollectionItem2 : CollectionItem2 fillItems(item: CollectionItem2) { diff --git a/tests/baselines/reference/genericCallWithConstraintsTypeArgumentInference.types b/tests/baselines/reference/genericCallWithConstraintsTypeArgumentInference.types index 29b41e12ee6..dcff9ef8a16 100644 --- a/tests/baselines/reference/genericCallWithConstraintsTypeArgumentInference.types +++ b/tests/baselines/reference/genericCallWithConstraintsTypeArgumentInference.types @@ -7,12 +7,12 @@ class Base { foo: string; } class Derived extends Base { bar: string; } >Derived : Derived ->Base : typeof Base +>Base : Base >bar : string class Derived2 extends Derived { baz: string; } >Derived2 : Derived2 ->Derived : typeof Derived +>Derived : Derived >baz : string var b: Base; diff --git a/tests/baselines/reference/genericCallWithObjectTypeArgs2.types b/tests/baselines/reference/genericCallWithObjectTypeArgs2.types index 7178caaef4f..08bce90b5de 100644 --- a/tests/baselines/reference/genericCallWithObjectTypeArgs2.types +++ b/tests/baselines/reference/genericCallWithObjectTypeArgs2.types @@ -7,14 +7,14 @@ class Base { } class Derived extends Base { >Derived : Derived ->Base : typeof Base +>Base : Base y: string; >y : string } class Derived2 extends Base { >Derived2 : Derived2 ->Base : typeof Base +>Base : Base z: string; >z : string diff --git a/tests/baselines/reference/genericCallWithObjectTypeArgsAndConstraints2.types b/tests/baselines/reference/genericCallWithObjectTypeArgsAndConstraints2.types index a870a02420a..8ffa07252bc 100644 --- a/tests/baselines/reference/genericCallWithObjectTypeArgsAndConstraints2.types +++ b/tests/baselines/reference/genericCallWithObjectTypeArgsAndConstraints2.types @@ -10,7 +10,7 @@ class Base { } class Derived extends Base { >Derived : Derived ->Base : typeof Base +>Base : Base y: string; >y : string diff --git a/tests/baselines/reference/genericCallbacksAndClassHierarchy.types b/tests/baselines/reference/genericCallbacksAndClassHierarchy.types index 419ec874859..cb12737a937 100644 --- a/tests/baselines/reference/genericCallbacksAndClassHierarchy.types +++ b/tests/baselines/reference/genericCallbacksAndClassHierarchy.types @@ -31,7 +31,7 @@ module M { export class B extends C1> { } >B : B >T : T ->C1 : typeof C1 +>C1 : C1> >A : A >T : T diff --git a/tests/baselines/reference/genericClassInheritsConstructorFromNonGenericClass.types b/tests/baselines/reference/genericClassInheritsConstructorFromNonGenericClass.types index 74ad65993e4..28daf6d38ee 100644 --- a/tests/baselines/reference/genericClassInheritsConstructorFromNonGenericClass.types +++ b/tests/baselines/reference/genericClassInheritsConstructorFromNonGenericClass.types @@ -1,12 +1,12 @@ === tests/cases/compiler/genericClassInheritsConstructorFromNonGenericClass.ts === class A extends B { } >A : A ->B : typeof B +>B : B class B extends C { } >B : B >U : U ->C : typeof C +>C : C class C { >C : C diff --git a/tests/baselines/reference/genericClassPropertyInheritanceSpecialization.types b/tests/baselines/reference/genericClassPropertyInheritanceSpecialization.types index ce93a483415..88ef74283ae 100644 --- a/tests/baselines/reference/genericClassPropertyInheritanceSpecialization.types +++ b/tests/baselines/reference/genericClassPropertyInheritanceSpecialization.types @@ -192,7 +192,7 @@ module PortalFx.ViewModels.Controls.Validators { export class Validator extends Portal.Controls.Validators.Validator { >Validator : Validator >TValue : TValue ->Portal.Controls.Validators.Validator : typeof Portal.Controls.Validators.Validator +>Portal.Controls.Validators.Validator : Portal.Controls.Validators.Validator >Portal.Controls.Validators : typeof Portal.Controls.Validators >Portal.Controls : typeof Portal.Controls >Portal : typeof Portal diff --git a/tests/baselines/reference/genericClassStaticMethod.types b/tests/baselines/reference/genericClassStaticMethod.types index fb38898d8a5..3d4c02317d6 100644 --- a/tests/baselines/reference/genericClassStaticMethod.types +++ b/tests/baselines/reference/genericClassStaticMethod.types @@ -11,7 +11,7 @@ class Foo { class Bar extends Foo { >Bar : Bar >T : T ->Foo : typeof Foo +>Foo : Foo >T : T static getFoo() { diff --git a/tests/baselines/reference/genericClasses3.types b/tests/baselines/reference/genericClasses3.types index 6bf78807e89..ea0ebcd2cc7 100644 --- a/tests/baselines/reference/genericClasses3.types +++ b/tests/baselines/reference/genericClasses3.types @@ -15,7 +15,7 @@ class B { class C extends B { >C : C >T : T ->B : typeof B +>B : B >T : T public x: T; diff --git a/tests/baselines/reference/genericConstraintOnExtendedBuiltinTypes.types b/tests/baselines/reference/genericConstraintOnExtendedBuiltinTypes.types index 2b870347f3c..9a4b209bc97 100644 --- a/tests/baselines/reference/genericConstraintOnExtendedBuiltinTypes.types +++ b/tests/baselines/reference/genericConstraintOnExtendedBuiltinTypes.types @@ -53,7 +53,7 @@ module EndGate.Tweening { export class NumberTween extends Tween{ >NumberTween : NumberTween ->Tween : typeof Tween +>Tween : Tween constructor(from: number) { >from : number diff --git a/tests/baselines/reference/genericConstraintOnExtendedBuiltinTypes2.types b/tests/baselines/reference/genericConstraintOnExtendedBuiltinTypes2.types index 4e8a3f094d9..ba42e42ae0c 100644 --- a/tests/baselines/reference/genericConstraintOnExtendedBuiltinTypes2.types +++ b/tests/baselines/reference/genericConstraintOnExtendedBuiltinTypes2.types @@ -52,7 +52,7 @@ module EndGate.Tweening { export class NumberTween extends Tween{ >NumberTween : NumberTween ->Tween : typeof Tween +>Tween : Tween >Number : Number constructor(from: number) { diff --git a/tests/baselines/reference/genericPrototypeProperty2.types b/tests/baselines/reference/genericPrototypeProperty2.types index 2e3594f6a22..1c95041b650 100644 --- a/tests/baselines/reference/genericPrototypeProperty2.types +++ b/tests/baselines/reference/genericPrototypeProperty2.types @@ -15,7 +15,7 @@ class MyEvent extends BaseEvent { >MyEvent : MyEvent >T : T >EventTarget : EventTarget ->BaseEvent : typeof BaseEvent +>BaseEvent : BaseEvent target: T; >target : T @@ -31,7 +31,7 @@ class BaseEventWrapper { class MyEventWrapper extends BaseEventWrapper { >MyEventWrapper : MyEventWrapper ->BaseEventWrapper : typeof BaseEventWrapper +>BaseEventWrapper : BaseEventWrapper t: MyEvent; // any satisfies constraint and passes assignability check between 'target' properties >t : MyEvent diff --git a/tests/baselines/reference/genericPrototypeProperty3.types b/tests/baselines/reference/genericPrototypeProperty3.types index aaa319f8dcc..5a190164642 100644 --- a/tests/baselines/reference/genericPrototypeProperty3.types +++ b/tests/baselines/reference/genericPrototypeProperty3.types @@ -9,7 +9,7 @@ class BaseEvent { class MyEvent extends BaseEvent { // T is instantiated to any in the prototype, which is assignable to {} >MyEvent : MyEvent >T : T ->BaseEvent : typeof BaseEvent +>BaseEvent : BaseEvent target: T; >target : T @@ -25,7 +25,7 @@ class BaseEventWrapper { class MyEventWrapper extends BaseEventWrapper { >MyEventWrapper : MyEventWrapper ->BaseEventWrapper : typeof BaseEventWrapper +>BaseEventWrapper : BaseEventWrapper t: MyEvent; >t : MyEvent diff --git a/tests/baselines/reference/genericRecursiveImplicitConstructorErrors2.types b/tests/baselines/reference/genericRecursiveImplicitConstructorErrors2.types index 52ec7e4c5bc..2f62a20c415 100644 --- a/tests/baselines/reference/genericRecursiveImplicitConstructorErrors2.types +++ b/tests/baselines/reference/genericRecursiveImplicitConstructorErrors2.types @@ -62,7 +62,7 @@ module TypeScript2 { >A : A >B : B >C : C ->PullSymbol : typeof PullSymbol +>PullSymbol : PullSymbol } } diff --git a/tests/baselines/reference/genericWithIndexerOfTypeParameterType2.types b/tests/baselines/reference/genericWithIndexerOfTypeParameterType2.types index c30eda7f9ee..2005604c83c 100644 --- a/tests/baselines/reference/genericWithIndexerOfTypeParameterType2.types +++ b/tests/baselines/reference/genericWithIndexerOfTypeParameterType2.types @@ -12,7 +12,7 @@ export class Collection { export class List extends Collection{ >List : List ->Collection : typeof Collection +>Collection : Collection >ListItem : ListItem Bar() {} @@ -24,7 +24,7 @@ export class CollectionItem {} export class ListItem extends CollectionItem { >ListItem : ListItem ->CollectionItem : typeof CollectionItem +>CollectionItem : CollectionItem __isNew: boolean; >__isNew : boolean diff --git a/tests/baselines/reference/heterogeneousArrayLiterals.types b/tests/baselines/reference/heterogeneousArrayLiterals.types index 8585ef59316..ecfbf75e864 100644 --- a/tests/baselines/reference/heterogeneousArrayLiterals.types +++ b/tests/baselines/reference/heterogeneousArrayLiterals.types @@ -121,12 +121,12 @@ class Base { foo: string; } class Derived extends Base { bar: string; } >Derived : Derived ->Base : typeof Base +>Base : Base >bar : string class Derived2 extends Base { baz: string; } >Derived2 : Derived2 ->Base : typeof Base +>Base : Base >baz : string var base: Base; diff --git a/tests/baselines/reference/ifDoWhileStatements.types b/tests/baselines/reference/ifDoWhileStatements.types index 42668f96f22..92a9df6a4dd 100644 --- a/tests/baselines/reference/ifDoWhileStatements.types +++ b/tests/baselines/reference/ifDoWhileStatements.types @@ -19,7 +19,7 @@ class C implements I { class C2 extends C { >C2 : C2 ->C : typeof C +>C : C valid: boolean; >valid : boolean diff --git a/tests/baselines/reference/importShadowsGlobalName.types b/tests/baselines/reference/importShadowsGlobalName.types index 973f81287c8..a1f1106f1b8 100644 --- a/tests/baselines/reference/importShadowsGlobalName.types +++ b/tests/baselines/reference/importShadowsGlobalName.types @@ -4,7 +4,7 @@ import Error = require('Foo'); class Bar extends Error {} >Bar : Bar ->Error : typeof Error +>Error : Error export = Bar; >Bar : Bar diff --git a/tests/baselines/reference/importUsedInExtendsList1.types b/tests/baselines/reference/importUsedInExtendsList1.types index 120f5a31444..3c1b69f5a83 100644 --- a/tests/baselines/reference/importUsedInExtendsList1.types +++ b/tests/baselines/reference/importUsedInExtendsList1.types @@ -5,7 +5,7 @@ import foo = require('importUsedInExtendsList1_require'); class Sub extends foo.Super { } >Sub : Sub ->foo.Super : typeof foo.Super +>foo.Super : foo.Super >foo : typeof foo >Super : typeof foo.Super diff --git a/tests/baselines/reference/infinitelyExpandingTypesNonGenericBase.types b/tests/baselines/reference/infinitelyExpandingTypesNonGenericBase.types index a09c8b0f448..9190ef15779 100644 --- a/tests/baselines/reference/infinitelyExpandingTypesNonGenericBase.types +++ b/tests/baselines/reference/infinitelyExpandingTypesNonGenericBase.types @@ -16,7 +16,7 @@ class Base { class A extends Base { >A : A >T : T ->Base : typeof Base +>Base : Base options: Options[]>; >options : Options[]> diff --git a/tests/baselines/reference/inheritSameNamePrivatePropertiesFromSameOrigin.types b/tests/baselines/reference/inheritSameNamePrivatePropertiesFromSameOrigin.types index 086f5a20c61..e8f05ca474d 100644 --- a/tests/baselines/reference/inheritSameNamePrivatePropertiesFromSameOrigin.types +++ b/tests/baselines/reference/inheritSameNamePrivatePropertiesFromSameOrigin.types @@ -7,11 +7,11 @@ class B { } class C extends B { } >C : C ->B : typeof B +>B : B class C2 extends B { } >C2 : C2 ->B : typeof B +>B : B interface A extends C, C2 { // ok >A : A diff --git a/tests/baselines/reference/inheritanceMemberFuncOverridingMethod.types b/tests/baselines/reference/inheritanceMemberFuncOverridingMethod.types index 44b0e7db937..3f170d1a6ec 100644 --- a/tests/baselines/reference/inheritanceMemberFuncOverridingMethod.types +++ b/tests/baselines/reference/inheritanceMemberFuncOverridingMethod.types @@ -12,7 +12,7 @@ class a { class b extends a { >b : b ->a : typeof a +>a : a x() { >x : () => string diff --git a/tests/baselines/reference/inheritanceMemberPropertyOverridingProperty.types b/tests/baselines/reference/inheritanceMemberPropertyOverridingProperty.types index a2709758a5c..d5f846187f8 100644 --- a/tests/baselines/reference/inheritanceMemberPropertyOverridingProperty.types +++ b/tests/baselines/reference/inheritanceMemberPropertyOverridingProperty.types @@ -8,7 +8,7 @@ class a { class b extends a { >b : b ->a : typeof a +>a : a x: () => string; >x : () => string diff --git a/tests/baselines/reference/inheritanceOfGenericConstructorMethod1.types b/tests/baselines/reference/inheritanceOfGenericConstructorMethod1.types index 3005a22871f..d18b02ec8d0 100644 --- a/tests/baselines/reference/inheritanceOfGenericConstructorMethod1.types +++ b/tests/baselines/reference/inheritanceOfGenericConstructorMethod1.types @@ -6,7 +6,7 @@ class A { } class B extends A {} >B : B >T : T ->A : typeof A +>A : A >T : T var a = new A(); diff --git a/tests/baselines/reference/inheritanceOfGenericConstructorMethod2.types b/tests/baselines/reference/inheritanceOfGenericConstructorMethod2.types index d77e5b55e49..c976e905db7 100644 --- a/tests/baselines/reference/inheritanceOfGenericConstructorMethod2.types +++ b/tests/baselines/reference/inheritanceOfGenericConstructorMethod2.types @@ -14,14 +14,14 @@ module N { export class D1 extends M.C1 { } >D1 : D1 ->M.C1 : typeof M.C1 +>M.C1 : M.C1 >M : typeof M >C1 : typeof M.C1 export class D2 extends M.C2 { } >D2 : D2 >T : T ->M.C2 : typeof M.C2 +>M.C2 : M.C2 >M : typeof M >C2 : typeof M.C2 >T : T diff --git a/tests/baselines/reference/inheritanceStaticFuncOverridingMethod.types b/tests/baselines/reference/inheritanceStaticFuncOverridingMethod.types index e2ddfcb2254..22fa0a6660f 100644 --- a/tests/baselines/reference/inheritanceStaticFuncOverridingMethod.types +++ b/tests/baselines/reference/inheritanceStaticFuncOverridingMethod.types @@ -12,7 +12,7 @@ class a { class b extends a { >b : b ->a : typeof a +>a : a static x() { >x : () => string diff --git a/tests/baselines/reference/inheritanceStaticFuncOverridingPropertyOfFuncType.types b/tests/baselines/reference/inheritanceStaticFuncOverridingPropertyOfFuncType.types index 9e7372f25d0..a7df20382ec 100644 --- a/tests/baselines/reference/inheritanceStaticFuncOverridingPropertyOfFuncType.types +++ b/tests/baselines/reference/inheritanceStaticFuncOverridingPropertyOfFuncType.types @@ -8,7 +8,7 @@ class a { class b extends a { >b : b ->a : typeof a +>a : a static x() { >x : () => string diff --git a/tests/baselines/reference/inheritanceStaticFunctionOverridingInstanceProperty.types b/tests/baselines/reference/inheritanceStaticFunctionOverridingInstanceProperty.types index 624ea629e33..4742dde63f6 100644 --- a/tests/baselines/reference/inheritanceStaticFunctionOverridingInstanceProperty.types +++ b/tests/baselines/reference/inheritanceStaticFunctionOverridingInstanceProperty.types @@ -8,7 +8,7 @@ class a { class b extends a { >b : b ->a : typeof a +>a : a static x() { >x : () => string diff --git a/tests/baselines/reference/inheritanceStaticMembersCompatible.types b/tests/baselines/reference/inheritanceStaticMembersCompatible.types index 5bec0707b04..cab8be93785 100644 --- a/tests/baselines/reference/inheritanceStaticMembersCompatible.types +++ b/tests/baselines/reference/inheritanceStaticMembersCompatible.types @@ -9,7 +9,7 @@ class a { class b extends a { >b : b ->a : typeof a +>a : a static x: b; >x : b diff --git a/tests/baselines/reference/inheritanceStaticPropertyOverridingProperty.types b/tests/baselines/reference/inheritanceStaticPropertyOverridingProperty.types index 5d627af6788..958fb6723cc 100644 --- a/tests/baselines/reference/inheritanceStaticPropertyOverridingProperty.types +++ b/tests/baselines/reference/inheritanceStaticPropertyOverridingProperty.types @@ -8,7 +8,7 @@ class a { class b extends a { >b : b ->a : typeof a +>a : a static x: () => string; >x : () => string diff --git a/tests/baselines/reference/instantiatedReturnTypeContravariance.types b/tests/baselines/reference/instantiatedReturnTypeContravariance.types index de4199d835c..1de1b8b7151 100644 --- a/tests/baselines/reference/instantiatedReturnTypeContravariance.types +++ b/tests/baselines/reference/instantiatedReturnTypeContravariance.types @@ -28,7 +28,7 @@ return null; class d extends c { >d : d ->c : typeof c +>c : c foo(): B { >foo : () => B diff --git a/tests/baselines/reference/interfaceExtendsClass1.types b/tests/baselines/reference/interfaceExtendsClass1.types index 06c46488942..c2370f7fe7f 100644 --- a/tests/baselines/reference/interfaceExtendsClass1.types +++ b/tests/baselines/reference/interfaceExtendsClass1.types @@ -14,21 +14,21 @@ interface SelectableControl extends Control { } class Button extends Control { >Button : Button ->Control : typeof Control +>Control : Control select() { } >select : () => void } class TextBox extends Control { >TextBox : TextBox ->Control : typeof Control +>Control : Control select() { } >select : () => void } class Image extends Control { >Image : Image ->Control : typeof Control +>Control : Control } class Location { >Location : Location diff --git a/tests/baselines/reference/iterableArrayPattern11.types b/tests/baselines/reference/iterableArrayPattern11.types index 819743bad59..3118e748d6f 100644 --- a/tests/baselines/reference/iterableArrayPattern11.types +++ b/tests/baselines/reference/iterableArrayPattern11.types @@ -18,7 +18,7 @@ class Bar { x } class Foo extends Bar { y } >Foo : Foo ->Bar : typeof Bar +>Bar : Bar >y : any class FooIterator { diff --git a/tests/baselines/reference/iterableArrayPattern12.types b/tests/baselines/reference/iterableArrayPattern12.types index 2f468dc89ca..b32c2ff7dc8 100644 --- a/tests/baselines/reference/iterableArrayPattern12.types +++ b/tests/baselines/reference/iterableArrayPattern12.types @@ -18,7 +18,7 @@ class Bar { x } class Foo extends Bar { y } >Foo : Foo ->Bar : typeof Bar +>Bar : Bar >y : any class FooIterator { diff --git a/tests/baselines/reference/iterableArrayPattern13.types b/tests/baselines/reference/iterableArrayPattern13.types index cc3a15d85d4..556a871f5a8 100644 --- a/tests/baselines/reference/iterableArrayPattern13.types +++ b/tests/baselines/reference/iterableArrayPattern13.types @@ -16,7 +16,7 @@ class Bar { x } class Foo extends Bar { y } >Foo : Foo ->Bar : typeof Bar +>Bar : Bar >y : any class FooIterator { diff --git a/tests/baselines/reference/iterableArrayPattern3.types b/tests/baselines/reference/iterableArrayPattern3.types index 91b359b4d68..fed5c7f07d3 100644 --- a/tests/baselines/reference/iterableArrayPattern3.types +++ b/tests/baselines/reference/iterableArrayPattern3.types @@ -19,7 +19,7 @@ class Bar { x } class Foo extends Bar { y } >Foo : Foo ->Bar : typeof Bar +>Bar : Bar >y : any class FooIterator { diff --git a/tests/baselines/reference/iterableArrayPattern4.types b/tests/baselines/reference/iterableArrayPattern4.types index d4f697fe432..8f05a454b53 100644 --- a/tests/baselines/reference/iterableArrayPattern4.types +++ b/tests/baselines/reference/iterableArrayPattern4.types @@ -20,7 +20,7 @@ class Bar { x } class Foo extends Bar { y } >Foo : Foo ->Bar : typeof Bar +>Bar : Bar >y : any class FooIterator { diff --git a/tests/baselines/reference/iterableArrayPattern9.types b/tests/baselines/reference/iterableArrayPattern9.types index c58f87fcfdd..03cfa31b621 100644 --- a/tests/baselines/reference/iterableArrayPattern9.types +++ b/tests/baselines/reference/iterableArrayPattern9.types @@ -12,7 +12,7 @@ class Bar { x } class Foo extends Bar { y } >Foo : Foo ->Bar : typeof Bar +>Bar : Bar >y : any class FooIterator { diff --git a/tests/baselines/reference/localTypes1.types b/tests/baselines/reference/localTypes1.types index cfab2a2f9b4..1770a36edb7 100644 --- a/tests/baselines/reference/localTypes1.types +++ b/tests/baselines/reference/localTypes1.types @@ -340,7 +340,7 @@ function f6() { class B extends A { >B : B ->A : typeof A +>A : A b: string; >b : string @@ -350,7 +350,7 @@ function f6() { class C extends B { >C : C ->B : typeof B +>B : B c: string; >c : string diff --git a/tests/baselines/reference/m7Bugs.types b/tests/baselines/reference/m7Bugs.types index 1c676f00e97..fa627f20cf7 100644 --- a/tests/baselines/reference/m7Bugs.types +++ b/tests/baselines/reference/m7Bugs.types @@ -41,7 +41,7 @@ class C1 { class C2 extends C1 {} >C2 : C2 ->C1 : typeof C1 +>C1 : C1 var y1: C1 = new C2(); >y1 : C1 diff --git a/tests/baselines/reference/moduleImportedForTypeArgumentPosition.types b/tests/baselines/reference/moduleImportedForTypeArgumentPosition.types index 3e3a6b5cc1d..d3ef4e4e9ce 100644 --- a/tests/baselines/reference/moduleImportedForTypeArgumentPosition.types +++ b/tests/baselines/reference/moduleImportedForTypeArgumentPosition.types @@ -9,7 +9,7 @@ class C1{ } class Test1 extends C1 { >Test1 : Test1 ->C1 : typeof C1 +>C1 : C1 >M2 : any >M2C : M2.M2C } diff --git a/tests/baselines/reference/moduleWithStatementsOfEveryKind.types b/tests/baselines/reference/moduleWithStatementsOfEveryKind.types index e2d2ef16773..c6f4be850be 100644 --- a/tests/baselines/reference/moduleWithStatementsOfEveryKind.types +++ b/tests/baselines/reference/moduleWithStatementsOfEveryKind.types @@ -18,14 +18,14 @@ module A { class B extends AA implements I { id: number } >B : B ->AA : typeof AA +>AA : AA >I : I >id : number class BB extends A { >BB : BB >T : T ->A : typeof A +>A : A id: number; >id : number @@ -106,14 +106,14 @@ module Y { export class B extends AA implements I { id: number } >B : B ->AA : typeof AA +>AA : AA >I : I >id : number export class BB extends A { >BB : BB >T : T ->A : typeof A +>A : A id: number; >id : number diff --git a/tests/baselines/reference/mutuallyRecursiveGenericBaseTypes2.types b/tests/baselines/reference/mutuallyRecursiveGenericBaseTypes2.types index fd0f5034488..ac722f8a063 100644 --- a/tests/baselines/reference/mutuallyRecursiveGenericBaseTypes2.types +++ b/tests/baselines/reference/mutuallyRecursiveGenericBaseTypes2.types @@ -13,7 +13,7 @@ class foo class foo2 extends foo { >foo2 : foo2 >T : T ->foo : typeof foo +>foo : foo >T : T } diff --git a/tests/baselines/reference/noEmitHelpers.types b/tests/baselines/reference/noEmitHelpers.types index 07c16def25d..01c5d5acb3d 100644 --- a/tests/baselines/reference/noEmitHelpers.types +++ b/tests/baselines/reference/noEmitHelpers.types @@ -5,5 +5,5 @@ class A { } class B extends A { } >B : B ->A : typeof A +>A : A diff --git a/tests/baselines/reference/nonGenericClassExtendingGenericClassWithAny.types b/tests/baselines/reference/nonGenericClassExtendingGenericClassWithAny.types index 2dfbe2e6ffc..4eb4c61aedf 100644 --- a/tests/baselines/reference/nonGenericClassExtendingGenericClassWithAny.types +++ b/tests/baselines/reference/nonGenericClassExtendingGenericClassWithAny.types @@ -10,5 +10,5 @@ class Foo { class Bar extends Foo { } // Valid >Bar : Bar ->Foo : typeof Foo +>Foo : Foo diff --git a/tests/baselines/reference/numericIndexerConstraint3.types b/tests/baselines/reference/numericIndexerConstraint3.types index dfb58408bb5..2e249c89b8c 100644 --- a/tests/baselines/reference/numericIndexerConstraint3.types +++ b/tests/baselines/reference/numericIndexerConstraint3.types @@ -8,7 +8,7 @@ class A { class B extends A { >B : B ->A : typeof A +>A : A bar: string; >bar : string diff --git a/tests/baselines/reference/numericIndexerConstraint4.types b/tests/baselines/reference/numericIndexerConstraint4.types index e174b6718a1..97e72b5088d 100644 --- a/tests/baselines/reference/numericIndexerConstraint4.types +++ b/tests/baselines/reference/numericIndexerConstraint4.types @@ -8,7 +8,7 @@ class A { class B extends A { >B : B ->A : typeof A +>A : A bar: string; >bar : string diff --git a/tests/baselines/reference/objectTypesIdentityWithNumericIndexers1.types b/tests/baselines/reference/objectTypesIdentityWithNumericIndexers1.types index f933c3a9e81..2284d06ffbd 100644 --- a/tests/baselines/reference/objectTypesIdentityWithNumericIndexers1.types +++ b/tests/baselines/reference/objectTypesIdentityWithNumericIndexers1.types @@ -33,12 +33,12 @@ interface I { class PA extends A { >PA : PA ->A : typeof A +>A : A } class PB extends B { >PB : PB ->B : typeof B +>B : B } var a: { diff --git a/tests/baselines/reference/objectTypesIdentityWithNumericIndexers2.types b/tests/baselines/reference/objectTypesIdentityWithNumericIndexers2.types index d6de1fa313b..1a580297b1b 100644 --- a/tests/baselines/reference/objectTypesIdentityWithNumericIndexers2.types +++ b/tests/baselines/reference/objectTypesIdentityWithNumericIndexers2.types @@ -7,7 +7,7 @@ class Base { foo: string; } class Derived extends Base { bar: string; } >Derived : Derived ->Base : typeof Base +>Base : Base >bar : string class A { @@ -45,12 +45,12 @@ interface I { class PA extends A { >PA : PA ->A : typeof A +>A : A } class PB extends B { >PB : PB ->B : typeof B +>B : B } var a: { diff --git a/tests/baselines/reference/objectTypesIdentityWithNumericIndexers3.types b/tests/baselines/reference/objectTypesIdentityWithNumericIndexers3.types index 3a80a2420df..ae384bbb4db 100644 --- a/tests/baselines/reference/objectTypesIdentityWithNumericIndexers3.types +++ b/tests/baselines/reference/objectTypesIdentityWithNumericIndexers3.types @@ -33,12 +33,12 @@ interface I { class PA extends A { >PA : PA ->A : typeof A +>A : A } class PB extends B { >PB : PB ->B : typeof B +>B : B } var a: { diff --git a/tests/baselines/reference/objectTypesIdentityWithPrivates.types b/tests/baselines/reference/objectTypesIdentityWithPrivates.types index cea0c3a1559..c828f45ac5a 100644 --- a/tests/baselines/reference/objectTypesIdentityWithPrivates.types +++ b/tests/baselines/reference/objectTypesIdentityWithPrivates.types @@ -33,12 +33,12 @@ interface I { class PA extends A { >PA : PA ->A : typeof A +>A : A } class PB extends B { >PB : PB ->B : typeof B +>B : B } var a: { foo: string; } diff --git a/tests/baselines/reference/objectTypesIdentityWithPrivates2.types b/tests/baselines/reference/objectTypesIdentityWithPrivates2.types index ea04e50fb0d..a29edc75162 100644 --- a/tests/baselines/reference/objectTypesIdentityWithPrivates2.types +++ b/tests/baselines/reference/objectTypesIdentityWithPrivates2.types @@ -13,7 +13,7 @@ class C { class D extends C { >D : D >T : T ->C : typeof C +>C : C >T : T } diff --git a/tests/baselines/reference/objectTypesIdentityWithStringIndexers.types b/tests/baselines/reference/objectTypesIdentityWithStringIndexers.types index ed4ba4f3d36..a7eeb672504 100644 --- a/tests/baselines/reference/objectTypesIdentityWithStringIndexers.types +++ b/tests/baselines/reference/objectTypesIdentityWithStringIndexers.types @@ -33,12 +33,12 @@ interface I { class PA extends A { >PA : PA ->A : typeof A +>A : A } class PB extends B { >PB : PB ->B : typeof B +>B : B } var a: { diff --git a/tests/baselines/reference/objectTypesIdentityWithStringIndexers2.types b/tests/baselines/reference/objectTypesIdentityWithStringIndexers2.types index e0de7d5a94d..d1394252117 100644 --- a/tests/baselines/reference/objectTypesIdentityWithStringIndexers2.types +++ b/tests/baselines/reference/objectTypesIdentityWithStringIndexers2.types @@ -7,7 +7,7 @@ class Base { foo: string; } class Derived extends Base { bar: string; } >Derived : Derived ->Base : typeof Base +>Base : Base >bar : string class A { @@ -45,12 +45,12 @@ interface I { class PA extends A { >PA : PA ->A : typeof A +>A : A } class PB extends B { >PB : PB ->B : typeof B +>B : B } var a: { diff --git a/tests/baselines/reference/optionalConstructorArgInSuper.types b/tests/baselines/reference/optionalConstructorArgInSuper.types index 91c12e34217..26d4fcb9abb 100644 --- a/tests/baselines/reference/optionalConstructorArgInSuper.types +++ b/tests/baselines/reference/optionalConstructorArgInSuper.types @@ -11,7 +11,7 @@ class Base { } class Derived extends Base { >Derived : Derived ->Base : typeof Base +>Base : Base } var d = new Derived(); // bug caused an error here, couldn't select overload >d : Derived diff --git a/tests/baselines/reference/optionalParamInOverride.types b/tests/baselines/reference/optionalParamInOverride.types index 7bc60b3fe1d..f4530dace61 100644 --- a/tests/baselines/reference/optionalParamInOverride.types +++ b/tests/baselines/reference/optionalParamInOverride.types @@ -7,7 +7,7 @@ class Z { } class Y extends Z { >Y : Y ->Z : typeof Z +>Z : Z public func(value?: any): void { } >func : (value?: any) => void diff --git a/tests/baselines/reference/overloadOnConstConstraintChecks1.types b/tests/baselines/reference/overloadOnConstConstraintChecks1.types index d3c10e9cbd9..cc561eb6e21 100644 --- a/tests/baselines/reference/overloadOnConstConstraintChecks1.types +++ b/tests/baselines/reference/overloadOnConstConstraintChecks1.types @@ -5,17 +5,17 @@ class Base { foo() { } } class Derived1 extends Base { bar() { } } >Derived1 : Derived1 ->Base : typeof Base +>Base : Base >bar : () => void class Derived2 extends Base { baz() { } } >Derived2 : Derived2 ->Base : typeof Base +>Base : Base >baz : () => void class Derived3 extends Base { biz() { } } >Derived3 : Derived3 ->Base : typeof Base +>Base : Base >biz : () => void interface MyDoc { // Document diff --git a/tests/baselines/reference/overloadOnConstConstraintChecks2.types b/tests/baselines/reference/overloadOnConstConstraintChecks2.types index f571ee0275e..36fa89dec4a 100644 --- a/tests/baselines/reference/overloadOnConstConstraintChecks2.types +++ b/tests/baselines/reference/overloadOnConstConstraintChecks2.types @@ -4,11 +4,11 @@ class A {} class B extends A {} >B : B ->A : typeof A +>A : A class C extends A { >C : C ->A : typeof A +>A : A public foo() { } >foo : () => void diff --git a/tests/baselines/reference/overloadOnConstConstraintChecks3.types b/tests/baselines/reference/overloadOnConstConstraintChecks3.types index aaf79e2f35b..94a03bb7680 100644 --- a/tests/baselines/reference/overloadOnConstConstraintChecks3.types +++ b/tests/baselines/reference/overloadOnConstConstraintChecks3.types @@ -6,11 +6,11 @@ class A { private x = 1} class B extends A {} >B : B ->A : typeof A +>A : A class C extends A { >C : C ->A : typeof A +>A : A public foo() { } >foo : () => void diff --git a/tests/baselines/reference/privacyClass.types b/tests/baselines/reference/privacyClass.types index 10edc47fec8..d42133ad9ec 100644 --- a/tests/baselines/reference/privacyClass.types +++ b/tests/baselines/reference/privacyClass.types @@ -24,19 +24,19 @@ export module m1 { class m1_C1_private extends m1_c_public { >m1_C1_private : m1_C1_private ->m1_c_public : typeof m1_c_public +>m1_c_public : m1_c_public } class m1_C2_private extends m1_c_private { >m1_C2_private : m1_C2_private ->m1_c_private : typeof m1_c_private +>m1_c_private : m1_c_private } export class m1_C3_public extends m1_c_public { >m1_C3_public : m1_C3_public ->m1_c_public : typeof m1_c_public +>m1_c_public : m1_c_public } export class m1_C4_public extends m1_c_private { >m1_C4_public : m1_C4_public ->m1_c_private : typeof m1_c_private +>m1_c_private : m1_c_private } class m1_C5_private implements m1_i_public { @@ -58,25 +58,25 @@ export module m1 { class m1_C9_private extends m1_c_public implements m1_i_private, m1_i_public { >m1_C9_private : m1_C9_private ->m1_c_public : typeof m1_c_public +>m1_c_public : m1_c_public >m1_i_private : m1_i_private >m1_i_public : m1_i_public } class m1_C10_private extends m1_c_private implements m1_i_private, m1_i_public { >m1_C10_private : m1_C10_private ->m1_c_private : typeof m1_c_private +>m1_c_private : m1_c_private >m1_i_private : m1_i_private >m1_i_public : m1_i_public } export class m1_C11_public extends m1_c_public implements m1_i_private, m1_i_public { >m1_C11_public : m1_C11_public ->m1_c_public : typeof m1_c_public +>m1_c_public : m1_c_public >m1_i_private : m1_i_private >m1_i_public : m1_i_public } export class m1_C12_public extends m1_c_private implements m1_i_private, m1_i_public { >m1_C12_public : m1_C12_public ->m1_c_private : typeof m1_c_private +>m1_c_private : m1_c_private >m1_i_private : m1_i_private >m1_i_public : m1_i_public } @@ -108,19 +108,19 @@ module m2 { class m2_C1_private extends m2_c_public { >m2_C1_private : m2_C1_private ->m2_c_public : typeof m2_c_public +>m2_c_public : m2_c_public } class m2_C2_private extends m2_c_private { >m2_C2_private : m2_C2_private ->m2_c_private : typeof m2_c_private +>m2_c_private : m2_c_private } export class m2_C3_public extends m2_c_public { >m2_C3_public : m2_C3_public ->m2_c_public : typeof m2_c_public +>m2_c_public : m2_c_public } export class m2_C4_public extends m2_c_private { >m2_C4_public : m2_C4_public ->m2_c_private : typeof m2_c_private +>m2_c_private : m2_c_private } class m2_C5_private implements m2_i_public { @@ -142,25 +142,25 @@ module m2 { class m2_C9_private extends m2_c_public implements m2_i_private, m2_i_public { >m2_C9_private : m2_C9_private ->m2_c_public : typeof m2_c_public +>m2_c_public : m2_c_public >m2_i_private : m2_i_private >m2_i_public : m2_i_public } class m2_C10_private extends m2_c_private implements m2_i_private, m2_i_public { >m2_C10_private : m2_C10_private ->m2_c_private : typeof m2_c_private +>m2_c_private : m2_c_private >m2_i_private : m2_i_private >m2_i_public : m2_i_public } export class m2_C11_public extends m2_c_public implements m2_i_private, m2_i_public { >m2_C11_public : m2_C11_public ->m2_c_public : typeof m2_c_public +>m2_c_public : m2_c_public >m2_i_private : m2_i_private >m2_i_public : m2_i_public } export class m2_C12_public extends m2_c_private implements m2_i_private, m2_i_public { >m2_C12_public : m2_C12_public ->m2_c_private : typeof m2_c_private +>m2_c_private : m2_c_private >m2_i_private : m2_i_private >m2_i_public : m2_i_public } @@ -188,19 +188,19 @@ class glo_c_private { class glo_C1_private extends glo_c_public { >glo_C1_private : glo_C1_private ->glo_c_public : typeof glo_c_public +>glo_c_public : glo_c_public } class glo_C2_private extends glo_c_private { >glo_C2_private : glo_C2_private ->glo_c_private : typeof glo_c_private +>glo_c_private : glo_c_private } export class glo_C3_public extends glo_c_public { >glo_C3_public : glo_C3_public ->glo_c_public : typeof glo_c_public +>glo_c_public : glo_c_public } export class glo_C4_public extends glo_c_private { >glo_C4_public : glo_C4_public ->glo_c_private : typeof glo_c_private +>glo_c_private : glo_c_private } class glo_C5_private implements glo_i_public { @@ -222,25 +222,25 @@ export class glo_C8_public implements glo_i_private { class glo_C9_private extends glo_c_public implements glo_i_private, glo_i_public { >glo_C9_private : glo_C9_private ->glo_c_public : typeof glo_c_public +>glo_c_public : glo_c_public >glo_i_private : glo_i_private >glo_i_public : glo_i_public } class glo_C10_private extends glo_c_private implements glo_i_private, glo_i_public { >glo_C10_private : glo_C10_private ->glo_c_private : typeof glo_c_private +>glo_c_private : glo_c_private >glo_i_private : glo_i_private >glo_i_public : glo_i_public } export class glo_C11_public extends glo_c_public implements glo_i_private, glo_i_public { >glo_C11_public : glo_C11_public ->glo_c_public : typeof glo_c_public +>glo_c_public : glo_c_public >glo_i_private : glo_i_private >glo_i_public : glo_i_public } export class glo_C12_public extends glo_c_private implements glo_i_private, glo_i_public { >glo_C12_public : glo_C12_public ->glo_c_private : typeof glo_c_private +>glo_c_private : glo_c_private >glo_i_private : glo_i_private >glo_i_public : glo_i_public } diff --git a/tests/baselines/reference/privacyGloClass.types b/tests/baselines/reference/privacyGloClass.types index 5a5ee37f1a5..be0c8a74dcc 100644 --- a/tests/baselines/reference/privacyGloClass.types +++ b/tests/baselines/reference/privacyGloClass.types @@ -24,19 +24,19 @@ module m1 { class m1_C1_private extends m1_c_public { >m1_C1_private : m1_C1_private ->m1_c_public : typeof m1_c_public +>m1_c_public : m1_c_public } class m1_C2_private extends m1_c_private { >m1_C2_private : m1_C2_private ->m1_c_private : typeof m1_c_private +>m1_c_private : m1_c_private } export class m1_C3_public extends m1_c_public { >m1_C3_public : m1_C3_public ->m1_c_public : typeof m1_c_public +>m1_c_public : m1_c_public } export class m1_C4_public extends m1_c_private { >m1_C4_public : m1_C4_public ->m1_c_private : typeof m1_c_private +>m1_c_private : m1_c_private } class m1_C5_private implements m1_i_public { @@ -58,25 +58,25 @@ module m1 { class m1_C9_private extends m1_c_public implements m1_i_private, m1_i_public { >m1_C9_private : m1_C9_private ->m1_c_public : typeof m1_c_public +>m1_c_public : m1_c_public >m1_i_private : m1_i_private >m1_i_public : m1_i_public } class m1_C10_private extends m1_c_private implements m1_i_private, m1_i_public { >m1_C10_private : m1_C10_private ->m1_c_private : typeof m1_c_private +>m1_c_private : m1_c_private >m1_i_private : m1_i_private >m1_i_public : m1_i_public } export class m1_C11_public extends m1_c_public implements m1_i_private, m1_i_public { >m1_C11_public : m1_C11_public ->m1_c_public : typeof m1_c_public +>m1_c_public : m1_c_public >m1_i_private : m1_i_private >m1_i_public : m1_i_public } export class m1_C12_public extends m1_c_private implements m1_i_private, m1_i_public { >m1_C12_public : m1_C12_public ->m1_c_private : typeof m1_c_private +>m1_c_private : m1_c_private >m1_i_private : m1_i_private >m1_i_public : m1_i_public } @@ -96,7 +96,7 @@ class glo_c_public { class glo_C3_public extends glo_c_public { >glo_C3_public : glo_C3_public ->glo_c_public : typeof glo_c_public +>glo_c_public : glo_c_public } class glo_C7_public implements glo_i_public { @@ -106,7 +106,7 @@ class glo_C7_public implements glo_i_public { class glo_C11_public extends glo_c_public implements glo_i_public { >glo_C11_public : glo_C11_public ->glo_c_public : typeof glo_c_public +>glo_c_public : glo_c_public >glo_i_public : glo_i_public } diff --git a/tests/baselines/reference/propertyAccessOnTypeParameterWithConstraints2.types b/tests/baselines/reference/propertyAccessOnTypeParameterWithConstraints2.types index fedeb79d7da..9ea015cc9ce 100644 --- a/tests/baselines/reference/propertyAccessOnTypeParameterWithConstraints2.types +++ b/tests/baselines/reference/propertyAccessOnTypeParameterWithConstraints2.types @@ -11,7 +11,7 @@ class A { class B extends A { >B : B ->A : typeof A +>A : A bar(): string { >bar : () => string diff --git a/tests/baselines/reference/protectedClassPropertyAccessibleWithinSubclass.types b/tests/baselines/reference/protectedClassPropertyAccessibleWithinSubclass.types index aad8bcb8c90..bd230239d47 100644 --- a/tests/baselines/reference/protectedClassPropertyAccessibleWithinSubclass.types +++ b/tests/baselines/reference/protectedClassPropertyAccessibleWithinSubclass.types @@ -13,7 +13,7 @@ class B { class C extends B { >C : C ->B : typeof B +>B : B protected get y() { return this.x; } >y : string diff --git a/tests/baselines/reference/recursiveBaseConstructorCreation1.types b/tests/baselines/reference/recursiveBaseConstructorCreation1.types index 081db0c0d51..4879fb260a3 100644 --- a/tests/baselines/reference/recursiveBaseConstructorCreation1.types +++ b/tests/baselines/reference/recursiveBaseConstructorCreation1.types @@ -9,7 +9,7 @@ public func(param: C2): any { } } class C2 extends C1 { } >C2 : C2 ->C1 : typeof C1 +>C1 : C1 var x = new C2(); // Valid >x : C2 diff --git a/tests/baselines/reference/recursiveBaseConstructorCreation2.types b/tests/baselines/reference/recursiveBaseConstructorCreation2.types index c2fbdc80aca..00b72ee7d4f 100644 --- a/tests/baselines/reference/recursiveBaseConstructorCreation2.types +++ b/tests/baselines/reference/recursiveBaseConstructorCreation2.types @@ -5,7 +5,7 @@ declare class base } declare class abc extends base >abc : abc ->base : typeof base +>base : base { foo: xyz; >foo : xyz @@ -13,7 +13,7 @@ declare class abc extends base } declare class xyz extends abc >xyz : xyz ->abc : typeof abc +>abc : abc { } diff --git a/tests/baselines/reference/recursiveClassInstantiationsWithDefaultConstructors.types b/tests/baselines/reference/recursiveClassInstantiationsWithDefaultConstructors.types index dfaf97734f9..482ec707e49 100644 --- a/tests/baselines/reference/recursiveClassInstantiationsWithDefaultConstructors.types +++ b/tests/baselines/reference/recursiveClassInstantiationsWithDefaultConstructors.types @@ -18,7 +18,7 @@ public prefix: string = ""; } export class MemberNameArray extends MemberName { >MemberNameArray : MemberNameArray ->MemberName : typeof MemberName +>MemberName : MemberName } } diff --git a/tests/baselines/reference/recursiveComplicatedClasses.types b/tests/baselines/reference/recursiveComplicatedClasses.types index d9e4f40f286..247b9ee27c5 100644 --- a/tests/baselines/reference/recursiveComplicatedClasses.types +++ b/tests/baselines/reference/recursiveComplicatedClasses.types @@ -39,15 +39,15 @@ class Symbol { } class InferenceSymbol extends Symbol { >InferenceSymbol : InferenceSymbol ->Symbol : typeof Symbol +>Symbol : Symbol } class ParameterSymbol extends InferenceSymbol { >ParameterSymbol : ParameterSymbol ->InferenceSymbol : typeof InferenceSymbol +>InferenceSymbol : InferenceSymbol } class TypeSymbol extends InferenceSymbol { >TypeSymbol : TypeSymbol ->InferenceSymbol : typeof InferenceSymbol +>InferenceSymbol : InferenceSymbol } diff --git a/tests/baselines/reference/recursivelySpecializedConstructorDeclaration.types b/tests/baselines/reference/recursivelySpecializedConstructorDeclaration.types index ee15a2a44dd..af9e13d4002 100644 --- a/tests/baselines/reference/recursivelySpecializedConstructorDeclaration.types +++ b/tests/baselines/reference/recursivelySpecializedConstructorDeclaration.types @@ -29,7 +29,7 @@ module MsPortal.Controls.Base.ItemList { export class ViewModel extends ItemValue { >ViewModel : ViewModel >TValue : TValue ->ItemValue : typeof ItemValue +>ItemValue : ItemValue >TValue : TValue } } diff --git a/tests/baselines/reference/resolvingClassDeclarationWhenInBaseTypeResolution.types b/tests/baselines/reference/resolvingClassDeclarationWhenInBaseTypeResolution.types index 82ac92209a4..c9025b56502 100644 --- a/tests/baselines/reference/resolvingClassDeclarationWhenInBaseTypeResolution.types +++ b/tests/baselines/reference/resolvingClassDeclarationWhenInBaseTypeResolution.types @@ -4,7 +4,7 @@ module rionegrensis { export class caniventer extends Lanthanum.nitidus { >caniventer : caniventer ->Lanthanum.nitidus : typeof Lanthanum.nitidus +>Lanthanum.nitidus : Lanthanum.nitidus >Lanthanum : typeof Lanthanum >nitidus : typeof Lanthanum.nitidus >petrophilus : any @@ -90,7 +90,7 @@ module rionegrensis { >veraecrucis : veraecrucis >T0 : T0 >T1 : T1 ->trivirgatus.mixtus : typeof trivirgatus.mixtus +>trivirgatus.mixtus : trivirgatus.mixtus >trivirgatus : typeof trivirgatus >mixtus : typeof trivirgatus.mixtus >gabriellae : any @@ -516,7 +516,7 @@ module julianae { >oralis : oralis >T0 : T0 >T1 : T1 ->caurinus.psilurus : typeof caurinus.psilurus +>caurinus.psilurus : caurinus.psilurus >caurinus : typeof caurinus >psilurus : typeof caurinus.psilurus @@ -754,7 +754,7 @@ module julianae { } export class sumatrana extends Lanthanum.jugularis { >sumatrana : sumatrana ->Lanthanum.jugularis : typeof Lanthanum.jugularis +>Lanthanum.jugularis : Lanthanum.jugularis >Lanthanum : typeof Lanthanum >jugularis : typeof Lanthanum.jugularis @@ -1280,7 +1280,7 @@ module julianae { } export class durangae extends dogramacii.aurata { >durangae : durangae ->dogramacii.aurata : typeof dogramacii.aurata +>dogramacii.aurata : dogramacii.aurata >dogramacii : typeof dogramacii >aurata : typeof dogramacii.aurata @@ -1434,7 +1434,7 @@ module Lanthanum { >nitidus : nitidus >T0 : T0 >T1 : T1 ->argurus.gilbertii : typeof argurus.gilbertii +>argurus.gilbertii : argurus.gilbertii >argurus : typeof argurus >gilbertii : typeof argurus.gilbertii >lavali : any @@ -1604,7 +1604,7 @@ module Lanthanum { } export class megalonyx extends caurinus.johorensis { >megalonyx : megalonyx ->caurinus.johorensis : typeof caurinus.johorensis +>caurinus.johorensis : caurinus.johorensis >caurinus : typeof caurinus >johorensis : typeof caurinus.johorensis >caurinus : any @@ -1991,7 +1991,7 @@ module rendalli { export class zuluensis extends julianae.steerii { >zuluensis : zuluensis ->julianae.steerii : typeof julianae.steerii +>julianae.steerii : julianae.steerii >julianae : typeof julianae >steerii : typeof julianae.steerii @@ -2426,7 +2426,7 @@ module rendalli { >crenulata : crenulata >T0 : T0 >T1 : T1 ->trivirgatus.falconeri : typeof trivirgatus.falconeri +>trivirgatus.falconeri : trivirgatus.falconeri >trivirgatus : typeof trivirgatus >falconeri : typeof trivirgatus.falconeri @@ -2621,7 +2621,7 @@ module trivirgatus { >mixtus : mixtus >T0 : T0 >T1 : T1 ->argurus.pygmaea : typeof argurus.pygmaea +>argurus.pygmaea : argurus.pygmaea> >argurus : typeof argurus >pygmaea : typeof argurus.pygmaea >argurus : any @@ -3359,7 +3359,7 @@ module ruatanica { export class americanus extends imperfecta.ciliolabrum { >americanus : americanus ->imperfecta.ciliolabrum : typeof imperfecta.ciliolabrum +>imperfecta.ciliolabrum : imperfecta.ciliolabrum >imperfecta : typeof imperfecta >ciliolabrum : typeof imperfecta.ciliolabrum >argurus : any @@ -3429,7 +3429,7 @@ module lavali { export class wilsoni extends Lanthanum.nitidus { >wilsoni : wilsoni ->Lanthanum.nitidus : typeof Lanthanum.nitidus +>Lanthanum.nitidus : Lanthanum.nitidus >Lanthanum : typeof Lanthanum >nitidus : typeof Lanthanum.nitidus >rionegrensis : any @@ -3650,7 +3650,7 @@ module lavali { } export class otion extends howi.coludo { >otion : otion ->howi.coludo : typeof howi.coludo +>howi.coludo : howi.coludo >howi : typeof howi >coludo : typeof howi.coludo >argurus : any @@ -4125,7 +4125,7 @@ module lavali { } export class thaeleri extends argurus.oreas { >thaeleri : thaeleri ->argurus.oreas : typeof argurus.oreas +>argurus.oreas : argurus.oreas >argurus : typeof argurus >oreas : typeof argurus.oreas @@ -4289,7 +4289,7 @@ module lavali { } export class lepturus extends Lanthanum.suillus { >lepturus : lepturus ->Lanthanum.suillus : typeof Lanthanum.suillus +>Lanthanum.suillus : Lanthanum.suillus >Lanthanum : typeof Lanthanum >suillus : typeof Lanthanum.suillus >dammermani : any @@ -4365,7 +4365,7 @@ module dogramacii { export class robustulus extends lavali.wilsoni { >robustulus : robustulus ->lavali.wilsoni : typeof lavali.wilsoni +>lavali.wilsoni : lavali.wilsoni >lavali : typeof lavali >wilsoni : typeof lavali.wilsoni @@ -4940,7 +4940,7 @@ module lutreolus { export class schlegeli extends lavali.beisa { >schlegeli : schlegeli ->lavali.beisa : typeof lavali.beisa +>lavali.beisa : lavali.beisa >lavali : typeof lavali >beisa : typeof lavali.beisa @@ -5678,7 +5678,7 @@ module panglima { >amphibius : amphibius >T0 : T0 >T1 : T1 ->caurinus.johorensis : typeof caurinus.johorensis +>caurinus.johorensis : caurinus.johorensis, Lanthanum.jugularis> >caurinus : typeof caurinus >johorensis : typeof caurinus.johorensis >Lanthanum : any @@ -5812,7 +5812,7 @@ module panglima { >fundatus : fundatus >T0 : T0 >T1 : T1 ->lutreolus.schlegeli : typeof lutreolus.schlegeli +>lutreolus.schlegeli : lutreolus.schlegeli >lutreolus : typeof lutreolus >schlegeli : typeof lutreolus.schlegeli @@ -5918,7 +5918,7 @@ module panglima { >abidi : abidi >T0 : T0 >T1 : T1 ->argurus.dauricus : typeof argurus.dauricus +>argurus.dauricus : argurus.dauricus >argurus : typeof argurus >dauricus : typeof argurus.dauricus >argurus : any @@ -6133,7 +6133,7 @@ module minutus { >himalayana : himalayana >T0 : T0 >T1 : T1 ->lutreolus.punicus : typeof lutreolus.punicus +>lutreolus.punicus : lutreolus.punicus >lutreolus : typeof lutreolus >punicus : typeof lutreolus.punicus @@ -6377,7 +6377,7 @@ module caurinus { >mahaganus : mahaganus >T0 : T0 >T1 : T1 ->panglima.fundatus : typeof panglima.fundatus +>panglima.fundatus : panglima.fundatus >panglima : typeof panglima >fundatus : typeof panglima.fundatus >quasiater : any @@ -6606,7 +6606,7 @@ module howi { >angulatus : angulatus >T0 : T0 >T1 : T1 ->sagitta.stolzmanni : typeof sagitta.stolzmanni +>sagitta.stolzmanni : sagitta.stolzmanni >sagitta : typeof sagitta >stolzmanni : typeof sagitta.stolzmanni @@ -6814,7 +6814,7 @@ module sagitta { export class walkeri extends minutus.portoricensis { >walkeri : walkeri ->minutus.portoricensis : typeof minutus.portoricensis +>minutus.portoricensis : minutus.portoricensis >minutus : typeof minutus >portoricensis : typeof minutus.portoricensis @@ -6846,7 +6846,7 @@ module minutus { >inez : inez >T0 : T0 >T1 : T1 ->samarensis.pelurus : typeof samarensis.pelurus +>samarensis.pelurus : samarensis.pelurus >samarensis : typeof samarensis >pelurus : typeof samarensis.pelurus >argurus : any @@ -6880,7 +6880,7 @@ module macrorhinos { export class konganensis extends imperfecta.lasiurus { >konganensis : konganensis ->imperfecta.lasiurus : typeof imperfecta.lasiurus +>imperfecta.lasiurus : imperfecta.lasiurus >imperfecta : typeof imperfecta >lasiurus : typeof imperfecta.lasiurus >caurinus : any @@ -6896,7 +6896,7 @@ module panamensis { >linulus : linulus >T0 : T0 >T1 : T1 ->ruatanica.hector : typeof ruatanica.hector +>ruatanica.hector : ruatanica.hector> >ruatanica : typeof ruatanica >hector : typeof ruatanica.hector >julianae : any @@ -7357,7 +7357,7 @@ module samarensis { >pelurus : pelurus >T0 : T0 >T1 : T1 ->sagitta.stolzmanni : typeof sagitta.stolzmanni +>sagitta.stolzmanni : sagitta.stolzmanni >sagitta : typeof sagitta >stolzmanni : typeof sagitta.stolzmanni @@ -7615,7 +7615,7 @@ module samarensis { >fuscus : fuscus >T0 : T0 >T1 : T1 ->macrorhinos.daphaenodon : typeof macrorhinos.daphaenodon +>macrorhinos.daphaenodon : macrorhinos.daphaenodon >macrorhinos : typeof macrorhinos >daphaenodon : typeof macrorhinos.daphaenodon @@ -8093,7 +8093,7 @@ module sagitta { >leptoceros : leptoceros >T0 : T0 >T1 : T1 ->caurinus.johorensis : typeof caurinus.johorensis +>caurinus.johorensis : caurinus.johorensis> >caurinus : typeof caurinus >johorensis : typeof caurinus.johorensis >argurus : any @@ -8205,7 +8205,7 @@ module daubentonii { >nigricans : nigricans >T0 : T0 >T1 : T1 ->sagitta.stolzmanni : typeof sagitta.stolzmanni +>sagitta.stolzmanni : sagitta.stolzmanni >sagitta : typeof sagitta >stolzmanni : typeof sagitta.stolzmanni @@ -8238,7 +8238,7 @@ module argurus { >pygmaea : pygmaea >T0 : T0 >T1 : T1 ->rendalli.moojeni : typeof rendalli.moojeni +>rendalli.moojeni : rendalli.moojeni >rendalli : typeof rendalli >moojeni : typeof rendalli.moojeni >macrorhinos : any @@ -8290,7 +8290,7 @@ module chrysaeolus { >sarasinorum : sarasinorum >T0 : T0 >T1 : T1 ->caurinus.psilurus : typeof caurinus.psilurus +>caurinus.psilurus : caurinus.psilurus >caurinus : typeof caurinus >psilurus : typeof caurinus.psilurus @@ -8533,7 +8533,7 @@ module argurus { export class oreas extends lavali.wilsoni { >oreas : oreas ->lavali.wilsoni : typeof lavali.wilsoni +>lavali.wilsoni : lavali.wilsoni >lavali : typeof lavali >wilsoni : typeof lavali.wilsoni @@ -9163,7 +9163,7 @@ module provocax { export class melanoleuca extends lavali.wilsoni { >melanoleuca : melanoleuca ->lavali.wilsoni : typeof lavali.wilsoni +>lavali.wilsoni : lavali.wilsoni >lavali : typeof lavali >wilsoni : typeof lavali.wilsoni @@ -9310,7 +9310,7 @@ module howi { export class marcanoi extends Lanthanum.megalonyx { >marcanoi : marcanoi ->Lanthanum.megalonyx : typeof Lanthanum.megalonyx +>Lanthanum.megalonyx : Lanthanum.megalonyx >Lanthanum : typeof Lanthanum >megalonyx : typeof Lanthanum.megalonyx @@ -10398,7 +10398,7 @@ module gabriellae { >klossii : klossii >T0 : T0 >T1 : T1 ->imperfecta.lasiurus : typeof imperfecta.lasiurus +>imperfecta.lasiurus : imperfecta.lasiurus >imperfecta : typeof imperfecta >lasiurus : typeof imperfecta.lasiurus >dogramacii : any @@ -10908,7 +10908,7 @@ module imperfecta { >ciliolabrum : ciliolabrum >T0 : T0 >T1 : T1 ->dogramacii.robustulus : typeof dogramacii.robustulus +>dogramacii.robustulus : dogramacii.robustulus >dogramacii : typeof dogramacii >robustulus : typeof dogramacii.robustulus @@ -11072,7 +11072,7 @@ module petrophilus { >sodyi : sodyi >T0 : T0 >T1 : T1 ->quasiater.bobrinskoi : typeof quasiater.bobrinskoi +>quasiater.bobrinskoi : quasiater.bobrinskoi >quasiater : typeof quasiater >bobrinskoi : typeof quasiater.bobrinskoi @@ -11206,7 +11206,7 @@ module caurinus { export class megaphyllus extends imperfecta.lasiurus> { >megaphyllus : megaphyllus ->imperfecta.lasiurus : typeof imperfecta.lasiurus +>imperfecta.lasiurus : imperfecta.lasiurus> >imperfecta : typeof imperfecta >lasiurus : typeof imperfecta.lasiurus >julianae : any @@ -11640,7 +11640,7 @@ module lutreolus { >cor : cor >T0 : T0 >T1 : T1 ->panglima.fundatus : typeof panglima.fundatus +>panglima.fundatus : panglima.fundatus, lavali.beisa>, dammermani.melanops> >panglima : typeof panglima >fundatus : typeof panglima.fundatus >panamensis : any @@ -11887,7 +11887,7 @@ module argurus { export class germaini extends gabriellae.amicus { >germaini : germaini ->gabriellae.amicus : typeof gabriellae.amicus +>gabriellae.amicus : gabriellae.amicus >gabriellae : typeof gabriellae >amicus : typeof gabriellae.amicus @@ -12100,7 +12100,7 @@ module dammermani { export class melanops extends minutus.inez { >melanops : melanops ->minutus.inez : typeof minutus.inez +>minutus.inez : minutus.inez >minutus : typeof minutus >inez : typeof minutus.inez >sagitta : any @@ -12350,7 +12350,7 @@ module argurus { export class peninsulae extends patas.uralensis { >peninsulae : peninsulae ->patas.uralensis : typeof patas.uralensis +>patas.uralensis : patas.uralensis >patas : typeof patas >uralensis : typeof patas.uralensis @@ -12815,7 +12815,7 @@ module ruatanica { >Praseodymium : Praseodymium >T0 : T0 >T1 : T1 ->ruatanica.hector : typeof hector +>ruatanica.hector : hector >ruatanica : typeof ruatanica >hector : typeof hector >lutreolus : any @@ -13163,7 +13163,7 @@ module caurinus { >johorensis : johorensis >T0 : T0 >T1 : T1 ->lutreolus.punicus : typeof lutreolus.punicus +>lutreolus.punicus : lutreolus.punicus >lutreolus : typeof lutreolus >punicus : typeof lutreolus.punicus @@ -13610,7 +13610,7 @@ module caurinus { export class psilurus extends lutreolus.punicus { >psilurus : psilurus ->lutreolus.punicus : typeof lutreolus.punicus +>lutreolus.punicus : lutreolus.punicus >lutreolus : typeof lutreolus >punicus : typeof lutreolus.punicus diff --git a/tests/baselines/reference/returnStatements.types b/tests/baselines/reference/returnStatements.types index 07b20e8cabe..e5332b2e6ac 100644 --- a/tests/baselines/reference/returnStatements.types +++ b/tests/baselines/reference/returnStatements.types @@ -49,7 +49,7 @@ class C implements I { } class D extends C { >D : D ->C : typeof C +>C : C name: string; >name : string diff --git a/tests/baselines/reference/sourceMapValidationClassWithDefaultConstructorAndExtendsClause.types b/tests/baselines/reference/sourceMapValidationClassWithDefaultConstructorAndExtendsClause.types index ef6e6a64663..12d8d56cf6e 100644 --- a/tests/baselines/reference/sourceMapValidationClassWithDefaultConstructorAndExtendsClause.types +++ b/tests/baselines/reference/sourceMapValidationClassWithDefaultConstructorAndExtendsClause.types @@ -5,7 +5,7 @@ class AbstractGreeter { class Greeter extends AbstractGreeter { >Greeter : Greeter ->AbstractGreeter : typeof AbstractGreeter +>AbstractGreeter : AbstractGreeter public a = 10; >a : number diff --git a/tests/baselines/reference/specializedInheritedConstructors1.types b/tests/baselines/reference/specializedInheritedConstructors1.types index 6ca5b01776a..7a7c4782406 100644 --- a/tests/baselines/reference/specializedInheritedConstructors1.types +++ b/tests/baselines/reference/specializedInheritedConstructors1.types @@ -27,7 +27,7 @@ class Model { } class MyView extends View { } >MyView : MyView ->View : typeof View +>View : View >Model : Model var m: ViewOptions = { model: new Model() }; diff --git a/tests/baselines/reference/staticFactory1.types b/tests/baselines/reference/staticFactory1.types index 419fffd6b0d..538728de2df 100644 --- a/tests/baselines/reference/staticFactory1.types +++ b/tests/baselines/reference/staticFactory1.types @@ -17,7 +17,7 @@ class Base { class Derived extends Base { >Derived : Derived ->Base : typeof Base +>Base : Base foo() { return 2; } >foo : () => number diff --git a/tests/baselines/reference/staticInheritance.types b/tests/baselines/reference/staticInheritance.types index 0235735ca44..04c64281ba8 100644 --- a/tests/baselines/reference/staticInheritance.types +++ b/tests/baselines/reference/staticInheritance.types @@ -18,7 +18,7 @@ class A { } class B extends A { >B : B ->A : typeof A +>A : A p1 = doThing(A); // OK >p1 : void diff --git a/tests/baselines/reference/staticMemberAccessOffDerivedType1.types b/tests/baselines/reference/staticMemberAccessOffDerivedType1.types index 835100d3e9b..55b9c83969b 100644 --- a/tests/baselines/reference/staticMemberAccessOffDerivedType1.types +++ b/tests/baselines/reference/staticMemberAccessOffDerivedType1.types @@ -11,7 +11,7 @@ class SomeBase { } class P extends SomeBase { >P : P ->SomeBase : typeof SomeBase +>SomeBase : SomeBase static SomeNumber = P.GetNumber(); >SomeNumber : number diff --git a/tests/baselines/reference/subtypingTransitivity.types b/tests/baselines/reference/subtypingTransitivity.types index 543284bf619..0a41e045d98 100644 --- a/tests/baselines/reference/subtypingTransitivity.types +++ b/tests/baselines/reference/subtypingTransitivity.types @@ -9,14 +9,14 @@ class B { class D extends B { >D : D ->B : typeof B +>B : B public x: string; >x : string } class D2 extends B { >D2 : D2 ->B : typeof B +>B : B public x: number; >x : number diff --git a/tests/baselines/reference/subtypingWithCallSignatures2.types b/tests/baselines/reference/subtypingWithCallSignatures2.types index 1e7e412c870..8a56e05a9c2 100644 --- a/tests/baselines/reference/subtypingWithCallSignatures2.types +++ b/tests/baselines/reference/subtypingWithCallSignatures2.types @@ -7,17 +7,17 @@ class Base { foo: string; } class Derived extends Base { bar: string; } >Derived : Derived ->Base : typeof Base +>Base : Base >bar : string class Derived2 extends Derived { baz: string; } >Derived2 : Derived2 ->Derived : typeof Derived +>Derived : Derived >baz : string class OtherDerived extends Base { bing: string; } >OtherDerived : OtherDerived ->Base : typeof Base +>Base : Base >bing : string declare function foo1(a: (x: number) => number[]): typeof a; diff --git a/tests/baselines/reference/subtypingWithCallSignatures3.types b/tests/baselines/reference/subtypingWithCallSignatures3.types index b925f7d923e..379810b2541 100644 --- a/tests/baselines/reference/subtypingWithCallSignatures3.types +++ b/tests/baselines/reference/subtypingWithCallSignatures3.types @@ -11,17 +11,17 @@ module Errors { class Derived extends Base { bar: string; } >Derived : Derived ->Base : typeof Base +>Base : Base >bar : string class Derived2 extends Derived { baz: string; } >Derived2 : Derived2 ->Derived : typeof Derived +>Derived : Derived >baz : string class OtherDerived extends Base { bing: string; } >OtherDerived : OtherDerived ->Base : typeof Base +>Base : Base >bing : string declare function foo2(a2: (x: number) => string[]): typeof a2; diff --git a/tests/baselines/reference/subtypingWithCallSignatures4.types b/tests/baselines/reference/subtypingWithCallSignatures4.types index caa06f6a8e6..e76d36114e9 100644 --- a/tests/baselines/reference/subtypingWithCallSignatures4.types +++ b/tests/baselines/reference/subtypingWithCallSignatures4.types @@ -7,17 +7,17 @@ class Base { foo: string; } class Derived extends Base { bar: string; } >Derived : Derived ->Base : typeof Base +>Base : Base >bar : string class Derived2 extends Derived { baz: string; } >Derived2 : Derived2 ->Derived : typeof Derived +>Derived : Derived >baz : string class OtherDerived extends Base { bing: string; } >OtherDerived : OtherDerived ->Base : typeof Base +>Base : Base >bing : string declare function foo1(a: (x: T) => T[]); diff --git a/tests/baselines/reference/subtypingWithConstructSignatures2.types b/tests/baselines/reference/subtypingWithConstructSignatures2.types index a7a547dad60..d723a367ecb 100644 --- a/tests/baselines/reference/subtypingWithConstructSignatures2.types +++ b/tests/baselines/reference/subtypingWithConstructSignatures2.types @@ -7,17 +7,17 @@ class Base { foo: string; } class Derived extends Base { bar: string; } >Derived : Derived ->Base : typeof Base +>Base : Base >bar : string class Derived2 extends Derived { baz: string; } >Derived2 : Derived2 ->Derived : typeof Derived +>Derived : Derived >baz : string class OtherDerived extends Base { bing: string; } >OtherDerived : OtherDerived ->Base : typeof Base +>Base : Base >bing : string declare function foo1(a: new (x: number) => number[]): typeof a; diff --git a/tests/baselines/reference/subtypingWithConstructSignatures3.types b/tests/baselines/reference/subtypingWithConstructSignatures3.types index a46b8c02e15..b0f0680c7a0 100644 --- a/tests/baselines/reference/subtypingWithConstructSignatures3.types +++ b/tests/baselines/reference/subtypingWithConstructSignatures3.types @@ -11,17 +11,17 @@ module Errors { class Derived extends Base { bar: string; } >Derived : Derived ->Base : typeof Base +>Base : Base >bar : string class Derived2 extends Derived { baz: string; } >Derived2 : Derived2 ->Derived : typeof Derived +>Derived : Derived >baz : string class OtherDerived extends Base { bing: string; } >OtherDerived : OtherDerived ->Base : typeof Base +>Base : Base >bing : string declare function foo2(a2: new (x: number) => string[]): typeof a2; diff --git a/tests/baselines/reference/subtypingWithConstructSignatures4.types b/tests/baselines/reference/subtypingWithConstructSignatures4.types index d4251e7cd4b..21a40ecf7fc 100644 --- a/tests/baselines/reference/subtypingWithConstructSignatures4.types +++ b/tests/baselines/reference/subtypingWithConstructSignatures4.types @@ -7,17 +7,17 @@ class Base { foo: string; } class Derived extends Base { bar: string; } >Derived : Derived ->Base : typeof Base +>Base : Base >bar : string class Derived2 extends Derived { baz: string; } >Derived2 : Derived2 ->Derived : typeof Derived +>Derived : Derived >baz : string class OtherDerived extends Base { bing: string; } >OtherDerived : OtherDerived ->Base : typeof Base +>Base : Base >bing : string declare function foo1(a: new (x: T) => T[]); diff --git a/tests/baselines/reference/subtypingWithConstructSignatures5.types b/tests/baselines/reference/subtypingWithConstructSignatures5.types index c2d49f8e661..7ffb4db5467 100644 --- a/tests/baselines/reference/subtypingWithConstructSignatures5.types +++ b/tests/baselines/reference/subtypingWithConstructSignatures5.types @@ -8,17 +8,17 @@ class Base { foo: string; } class Derived extends Base { bar: string; } >Derived : Derived ->Base : typeof Base +>Base : Base >bar : string class Derived2 extends Derived { baz: string; } >Derived2 : Derived2 ->Derived : typeof Derived +>Derived : Derived >baz : string class OtherDerived extends Base { bing: string; } >OtherDerived : OtherDerived ->Base : typeof Base +>Base : Base >bing : string interface A { // T diff --git a/tests/baselines/reference/subtypingWithConstructSignatures6.types b/tests/baselines/reference/subtypingWithConstructSignatures6.types index b94befab2f3..bcbf452615b 100644 --- a/tests/baselines/reference/subtypingWithConstructSignatures6.types +++ b/tests/baselines/reference/subtypingWithConstructSignatures6.types @@ -9,17 +9,17 @@ class Base { foo: string; } class Derived extends Base { bar: string; } >Derived : Derived ->Base : typeof Base +>Base : Base >bar : string class Derived2 extends Derived { baz: string; } >Derived2 : Derived2 ->Derived : typeof Derived +>Derived : Derived >baz : string class OtherDerived extends Base { bing: string; } >OtherDerived : OtherDerived ->Base : typeof Base +>Base : Base >bing : string interface A { // T diff --git a/tests/baselines/reference/subtypingWithObjectMembers4.types b/tests/baselines/reference/subtypingWithObjectMembers4.types index 2009632b74c..6e6475b2578 100644 --- a/tests/baselines/reference/subtypingWithObjectMembers4.types +++ b/tests/baselines/reference/subtypingWithObjectMembers4.types @@ -10,7 +10,7 @@ class Base { class Derived extends Base { >Derived : Derived ->Base : typeof Base +>Base : Base bar: string; >bar : string @@ -26,7 +26,7 @@ class A { class B extends A { >B : B ->A : typeof A +>A : A fooo: Derived; // ok, inherits foo >fooo : Derived @@ -42,7 +42,7 @@ class A2 { class B2 extends A2 { >B2 : B2 ->A2 : typeof A2 +>A2 : A2 1.1: Derived; // ok, inherits 1 >Derived : Derived @@ -57,7 +57,7 @@ class A3 { class B3 extends A3 { >B3 : B3 ->A3 : typeof A3 +>A3 : A3 '1.1': Derived; // ok, inherits '1' >Derived : Derived diff --git a/tests/baselines/reference/super2.types b/tests/baselines/reference/super2.types index c09ff3e8be5..a3807f03099 100644 --- a/tests/baselines/reference/super2.types +++ b/tests/baselines/reference/super2.types @@ -20,7 +20,7 @@ class Base5 { class Sub5 extends Base5 { >Sub5 : Sub5 ->Base5 : typeof Base5 +>Base5 : Base5 public x() { >x : () => string @@ -32,7 +32,7 @@ class Sub5 extends Base5 { class SubSub5 extends Sub5 { >SubSub5 : SubSub5 ->Sub5 : typeof Sub5 +>Sub5 : Sub5 public x() { >x : () => string @@ -68,7 +68,7 @@ class Base6 { class Sub6 extends Base6 { >Sub6 : Sub6 ->Base6 : typeof Base6 +>Base6 : Base6 public y() { >y : () => string @@ -80,7 +80,7 @@ class Sub6 extends Base6 { class SubSub6 extends Sub6 { >SubSub6 : SubSub6 ->Sub6 : typeof Sub6 +>Sub6 : Sub6 public y() { >y : () => string diff --git a/tests/baselines/reference/superAccessInFatArrow1.types b/tests/baselines/reference/superAccessInFatArrow1.types index 279a94b29e0..0c50015c051 100644 --- a/tests/baselines/reference/superAccessInFatArrow1.types +++ b/tests/baselines/reference/superAccessInFatArrow1.types @@ -11,7 +11,7 @@ module test { } export class B extends A { >B : B ->A : typeof A +>A : A bar(callback: () => void ) { >bar : (callback: () => void) => void diff --git a/tests/baselines/reference/superCallFromClassThatDerivesFromGenericType1.types b/tests/baselines/reference/superCallFromClassThatDerivesFromGenericType1.types index c0a66ff629a..02d85f763b5 100644 --- a/tests/baselines/reference/superCallFromClassThatDerivesFromGenericType1.types +++ b/tests/baselines/reference/superCallFromClassThatDerivesFromGenericType1.types @@ -16,7 +16,7 @@ declare class B { class D extends B { >D : D ->B : typeof B +>B : B constructor() { super(); diff --git a/tests/baselines/reference/superCallFromClassThatDerivesFromGenericType2.types b/tests/baselines/reference/superCallFromClassThatDerivesFromGenericType2.types index 873766b6af2..68959b8b4b6 100644 --- a/tests/baselines/reference/superCallFromClassThatDerivesFromGenericType2.types +++ b/tests/baselines/reference/superCallFromClassThatDerivesFromGenericType2.types @@ -12,7 +12,7 @@ declare class B { class D extends B { >D : D ->B : typeof B +>B : B constructor() { super(); diff --git a/tests/baselines/reference/superCallParameterContextualTyping1.types b/tests/baselines/reference/superCallParameterContextualTyping1.types index 31c6db02b80..4dc68fee3f7 100644 --- a/tests/baselines/reference/superCallParameterContextualTyping1.types +++ b/tests/baselines/reference/superCallParameterContextualTyping1.types @@ -16,7 +16,7 @@ class A { class B extends A { >B : B ->A : typeof A +>A : A // Ensure 'value' is of type 'number (and not '{}') by using its 'toExponential()' method. constructor() { super(value => String(value.toExponential())); } diff --git a/tests/baselines/reference/superCallParameterContextualTyping3.types b/tests/baselines/reference/superCallParameterContextualTyping3.types index a640fbfdeb1..262b624e78f 100644 --- a/tests/baselines/reference/superCallParameterContextualTyping3.types +++ b/tests/baselines/reference/superCallParameterContextualTyping3.types @@ -29,7 +29,7 @@ class CBase { class C extends CBase { >C : C ->CBase : typeof CBase +>CBase : CBase constructor() { // Should be okay. diff --git a/tests/baselines/reference/superCalls.types b/tests/baselines/reference/superCalls.types index 21f0d5dc7ee..ce5353df329 100644 --- a/tests/baselines/reference/superCalls.types +++ b/tests/baselines/reference/superCalls.types @@ -17,7 +17,7 @@ function v(): void { } class Derived extends Base { >Derived : Derived ->Base : typeof Base +>Base : Base //super call in class constructor of derived type constructor(public q: number) { @@ -49,7 +49,7 @@ class OtherBase { class OtherDerived extends OtherBase { >OtherDerived : OtherDerived ->OtherBase : typeof OtherBase +>OtherBase : OtherBase constructor() { var p = ''; diff --git a/tests/baselines/reference/superInCatchBlock1.types b/tests/baselines/reference/superInCatchBlock1.types index 33f5e974f61..616c11cee7f 100644 --- a/tests/baselines/reference/superInCatchBlock1.types +++ b/tests/baselines/reference/superInCatchBlock1.types @@ -7,7 +7,7 @@ class A { } class B extends A { >B : B ->A : typeof A +>A : A m() { >m : () => void diff --git a/tests/baselines/reference/superWithGenericSpecialization.types b/tests/baselines/reference/superWithGenericSpecialization.types index d9e4cbf820c..075362e8a29 100644 --- a/tests/baselines/reference/superWithGenericSpecialization.types +++ b/tests/baselines/reference/superWithGenericSpecialization.types @@ -11,7 +11,7 @@ class C { class D extends C { >D : D >T : T ->C : typeof C +>C : C y: T; >y : T diff --git a/tests/baselines/reference/superWithGenerics.types b/tests/baselines/reference/superWithGenerics.types index bdcaab7ba75..ddf2741e35c 100644 --- a/tests/baselines/reference/superWithGenerics.types +++ b/tests/baselines/reference/superWithGenerics.types @@ -16,7 +16,7 @@ declare class B { class D extends B { >D : D ->B : typeof B +>B : B constructor() { super(); diff --git a/tests/baselines/reference/switchStatements.types b/tests/baselines/reference/switchStatements.types index 2d8901c0cd0..a5679547c12 100644 --- a/tests/baselines/reference/switchStatements.types +++ b/tests/baselines/reference/switchStatements.types @@ -99,7 +99,7 @@ class C { id: number; } class D extends C { name: string } >D : D ->C : typeof C +>C : C >name : string switch (new C()) { diff --git a/tests/baselines/reference/symbolProperty26.types b/tests/baselines/reference/symbolProperty26.types index 3f482551bcc..386761c98f9 100644 --- a/tests/baselines/reference/symbolProperty26.types +++ b/tests/baselines/reference/symbolProperty26.types @@ -14,7 +14,7 @@ class C1 { class C2 extends C1 { >C2 : C2 ->C1 : typeof C1 +>C1 : C1 [Symbol.toStringTag]() { >Symbol.toStringTag : symbol diff --git a/tests/baselines/reference/symbolProperty27.types b/tests/baselines/reference/symbolProperty27.types index d65989a903d..d8ff2f2f116 100644 --- a/tests/baselines/reference/symbolProperty27.types +++ b/tests/baselines/reference/symbolProperty27.types @@ -14,7 +14,7 @@ class C1 { class C2 extends C1 { >C2 : C2 ->C1 : typeof C1 +>C1 : C1 [Symbol.toStringTag]() { >Symbol.toStringTag : symbol diff --git a/tests/baselines/reference/symbolProperty28.types b/tests/baselines/reference/symbolProperty28.types index 14a1f64f409..6eddebf44d8 100644 --- a/tests/baselines/reference/symbolProperty28.types +++ b/tests/baselines/reference/symbolProperty28.types @@ -16,7 +16,7 @@ class C1 { class C2 extends C1 { } >C2 : C2 ->C1 : typeof C1 +>C1 : C1 var c: C2; >c : C2 diff --git a/tests/baselines/reference/typeGuardFunction.types b/tests/baselines/reference/typeGuardFunction.types index 8addafa2bc6..cf673f965f9 100644 --- a/tests/baselines/reference/typeGuardFunction.types +++ b/tests/baselines/reference/typeGuardFunction.types @@ -16,7 +16,7 @@ class B { class C extends A { >C : C ->A : typeof A +>A : A propC: number; >propC : number diff --git a/tests/baselines/reference/typeGuardFunctionGenerics.types b/tests/baselines/reference/typeGuardFunctionGenerics.types index 6e0ea52aea6..77162e55a40 100644 --- a/tests/baselines/reference/typeGuardFunctionGenerics.types +++ b/tests/baselines/reference/typeGuardFunctionGenerics.types @@ -16,7 +16,7 @@ class B { class C extends A { >C : C ->A : typeof A +>A : A propC: number; >propC : number diff --git a/tests/baselines/reference/typeGuardOfFormInstanceOf.types b/tests/baselines/reference/typeGuardOfFormInstanceOf.types index 060c0caa37f..891e8c1bea2 100644 --- a/tests/baselines/reference/typeGuardOfFormInstanceOf.types +++ b/tests/baselines/reference/typeGuardOfFormInstanceOf.types @@ -19,7 +19,7 @@ class C2 { } class D1 extends C1 { >D1 : D1 ->C1 : typeof C1 +>C1 : C1 p3: number; >p3 : number diff --git a/tests/baselines/reference/typeGuardOfFormIsType.types b/tests/baselines/reference/typeGuardOfFormIsType.types index fc62b84a79a..b14e5e22910 100644 --- a/tests/baselines/reference/typeGuardOfFormIsType.types +++ b/tests/baselines/reference/typeGuardOfFormIsType.types @@ -14,7 +14,7 @@ class C2 { } class D1 extends C1 { >D1 : D1 ->C1 : typeof C1 +>C1 : C1 p3: number; >p3 : number diff --git a/tests/baselines/reference/typeOfSuperCall.types b/tests/baselines/reference/typeOfSuperCall.types index fc355df5413..92108bedc15 100644 --- a/tests/baselines/reference/typeOfSuperCall.types +++ b/tests/baselines/reference/typeOfSuperCall.types @@ -5,7 +5,7 @@ class C { class D extends C { >D : D ->C : typeof C +>C : C constructor() { var x: void = super(); diff --git a/tests/baselines/reference/typeParameterExtendingUnion1.types b/tests/baselines/reference/typeParameterExtendingUnion1.types index f907d65e0c3..29b748bab7d 100644 --- a/tests/baselines/reference/typeParameterExtendingUnion1.types +++ b/tests/baselines/reference/typeParameterExtendingUnion1.types @@ -5,12 +5,12 @@ class Animal { run() { } } class Cat extends Animal { meow } >Cat : Cat ->Animal : typeof Animal +>Animal : Animal >meow : any class Dog extends Animal { woof } >Dog : Dog ->Animal : typeof Animal +>Animal : Animal >woof : any function run(a: Animal) { diff --git a/tests/baselines/reference/typeParameterExtendingUnion2.types b/tests/baselines/reference/typeParameterExtendingUnion2.types index cc7eb67fd46..0bb1e6a58af 100644 --- a/tests/baselines/reference/typeParameterExtendingUnion2.types +++ b/tests/baselines/reference/typeParameterExtendingUnion2.types @@ -5,12 +5,12 @@ class Animal { run() { } } class Cat extends Animal { meow } >Cat : Cat ->Animal : typeof Animal +>Animal : Animal >meow : any class Dog extends Animal { woof } >Dog : Dog ->Animal : typeof Animal +>Animal : Animal >woof : any function run(a: Cat | Dog) { diff --git a/tests/baselines/reference/typeofClass2.types b/tests/baselines/reference/typeofClass2.types index 663316b30e9..8870d9a5874 100644 --- a/tests/baselines/reference/typeofClass2.types +++ b/tests/baselines/reference/typeofClass2.types @@ -31,7 +31,7 @@ class C { class D extends C { >D : D ->C : typeof C +>C : C static baz(x: number) { } >baz : (x: number) => void diff --git a/tests/baselines/reference/typesWithSpecializedCallSignatures.types b/tests/baselines/reference/typesWithSpecializedCallSignatures.types index 37d00550ed5..fa3ac7a4ba4 100644 --- a/tests/baselines/reference/typesWithSpecializedCallSignatures.types +++ b/tests/baselines/reference/typesWithSpecializedCallSignatures.types @@ -7,12 +7,12 @@ class Base { foo: string } class Derived1 extends Base { bar: string } >Derived1 : Derived1 ->Base : typeof Base +>Base : Base >bar : string class Derived2 extends Base { baz: string } >Derived2 : Derived2 ->Base : typeof Base +>Base : Base >baz : string class C { diff --git a/tests/baselines/reference/typesWithSpecializedConstructSignatures.types b/tests/baselines/reference/typesWithSpecializedConstructSignatures.types index 8f1f6a09b7f..66e274d917a 100644 --- a/tests/baselines/reference/typesWithSpecializedConstructSignatures.types +++ b/tests/baselines/reference/typesWithSpecializedConstructSignatures.types @@ -7,12 +7,12 @@ class Base { foo: string } class Derived1 extends Base { bar: string } >Derived1 : Derived1 ->Base : typeof Base +>Base : Base >bar : string class Derived2 extends Base { baz: string } >Derived2 : Derived2 ->Base : typeof Base +>Base : Base >baz : string class C { diff --git a/tests/baselines/reference/undefinedIsSubtypeOfEverything.types b/tests/baselines/reference/undefinedIsSubtypeOfEverything.types index d80f95c3b5e..d89f032bf29 100644 --- a/tests/baselines/reference/undefinedIsSubtypeOfEverything.types +++ b/tests/baselines/reference/undefinedIsSubtypeOfEverything.types @@ -11,7 +11,7 @@ class Base { class D0 extends Base { >D0 : D0 ->Base : typeof Base +>Base : Base foo: any; >foo : any @@ -19,7 +19,7 @@ class D0 extends Base { class DA extends Base { >DA : DA ->Base : typeof Base +>Base : Base foo: typeof undefined; >foo : any @@ -28,7 +28,7 @@ class DA extends Base { class D1 extends Base { >D1 : D1 ->Base : typeof Base +>Base : Base foo: string; >foo : string @@ -36,7 +36,7 @@ class D1 extends Base { class D1A extends Base { >D1A : D1A ->Base : typeof Base +>Base : Base foo: String; >foo : String @@ -46,7 +46,7 @@ class D1A extends Base { class D2 extends Base { >D2 : D2 ->Base : typeof Base +>Base : Base foo: number; >foo : number @@ -54,7 +54,7 @@ class D2 extends Base { class D2A extends Base { >D2A : D2A ->Base : typeof Base +>Base : Base foo: Number; >foo : Number @@ -64,7 +64,7 @@ class D2A extends Base { class D3 extends Base { >D3 : D3 ->Base : typeof Base +>Base : Base foo: boolean; >foo : boolean @@ -72,7 +72,7 @@ class D3 extends Base { class D3A extends Base { >D3A : D3A ->Base : typeof Base +>Base : Base foo: Boolean; >foo : Boolean @@ -82,7 +82,7 @@ class D3A extends Base { class D4 extends Base { >D4 : D4 ->Base : typeof Base +>Base : Base foo: RegExp; >foo : RegExp @@ -91,7 +91,7 @@ class D4 extends Base { class D5 extends Base { >D5 : D5 ->Base : typeof Base +>Base : Base foo: Date; >foo : Date @@ -101,7 +101,7 @@ class D5 extends Base { class D6 extends Base { >D6 : D6 ->Base : typeof Base +>Base : Base foo: number[]; >foo : number[] @@ -109,7 +109,7 @@ class D6 extends Base { class D7 extends Base { >D7 : D7 ->Base : typeof Base +>Base : Base foo: { bar: number }; >foo : { bar: number; } @@ -119,7 +119,7 @@ class D7 extends Base { class D8 extends Base { >D8 : D8 ->Base : typeof Base +>Base : Base foo: D7; >foo : D7 @@ -134,7 +134,7 @@ interface I1 { } class D9 extends Base { >D9 : D9 ->Base : typeof Base +>Base : Base foo: I1; >foo : I1 @@ -144,7 +144,7 @@ class D9 extends Base { class D10 extends Base { >D10 : D10 ->Base : typeof Base +>Base : Base foo: () => number; >foo : () => number @@ -156,7 +156,7 @@ enum E { A } class D11 extends Base { >D11 : D11 ->Base : typeof Base +>Base : Base foo: E; >foo : E @@ -175,7 +175,7 @@ module f { } class D12 extends Base { >D12 : D12 ->Base : typeof Base +>Base : Base foo: typeof f; >foo : typeof f @@ -196,7 +196,7 @@ module c { } class D13 extends Base { >D13 : D13 ->Base : typeof Base +>Base : Base foo: typeof c; >foo : typeof c @@ -207,7 +207,7 @@ class D13 extends Base { class D14 extends Base { >D14 : D14 >T : T ->Base : typeof Base +>Base : Base foo: T; >foo : T @@ -219,7 +219,7 @@ class D15 extends Base { >D15 : D15 >T : T >U : U ->Base : typeof Base +>Base : Base foo: U; >foo : U @@ -233,7 +233,7 @@ class D15 extends Base { class D16 extends Base { >D16 : D16 ->Base : typeof Base +>Base : Base foo: Object; >foo : Object @@ -243,7 +243,7 @@ class D16 extends Base { class D17 extends Base { >D17 : D17 ->Base : typeof Base +>Base : Base foo: {}; >foo : {} diff --git a/tests/baselines/reference/underscoreMapFirst.types b/tests/baselines/reference/underscoreMapFirst.types index c22d127ab34..4de320604bd 100644 --- a/tests/baselines/reference/underscoreMapFirst.types +++ b/tests/baselines/reference/underscoreMapFirst.types @@ -112,7 +112,7 @@ interface ISeries { class MyView extends View { >MyView : MyView ->View : typeof View +>View : View public getDataSeries(): ISeries[] { >getDataSeries : () => ISeries[] diff --git a/tests/baselines/reference/unionTypeFromArrayLiteral.types b/tests/baselines/reference/unionTypeFromArrayLiteral.types index 83fc69560f5..63aefdd214c 100644 --- a/tests/baselines/reference/unionTypeFromArrayLiteral.types +++ b/tests/baselines/reference/unionTypeFromArrayLiteral.types @@ -58,12 +58,12 @@ class D { foo2() { } } class E extends C { foo3() { } } >E : E ->C : typeof C +>C : C >foo3 : () => void class F extends C { foo4() { } } >F : F ->C : typeof C +>C : C >foo4 : () => void var c: C, d: D, e: E, f: F; diff --git a/tests/baselines/reference/validUseOfThisInSuper.types b/tests/baselines/reference/validUseOfThisInSuper.types index 75a2d8df9dc..d7c882496e2 100644 --- a/tests/baselines/reference/validUseOfThisInSuper.types +++ b/tests/baselines/reference/validUseOfThisInSuper.types @@ -9,7 +9,7 @@ class Base { } class Super extends Base { >Super : Super ->Base : typeof Base +>Base : Base constructor() { super((() => this)()); // ok since this is not the case: The constructor declares parameter properties or the containing class declares instance member variables with initializers. diff --git a/tests/baselines/reference/varArgsOnConstructorTypes.types b/tests/baselines/reference/varArgsOnConstructorTypes.types index c595476a039..5ac9babd426 100644 --- a/tests/baselines/reference/varArgsOnConstructorTypes.types +++ b/tests/baselines/reference/varArgsOnConstructorTypes.types @@ -8,7 +8,7 @@ export class A { export class B extends A { >B : B ->A : typeof A +>A : A private p1: number; >p1 : number From de8eb229c8c212f001ab5210f393fad8cda5b570 Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Tue, 16 Jun 2015 11:49:15 -0700 Subject: [PATCH 15/17] Adding comments and doing a bit of renaming --- src/compiler/checker.ts | 46 ++++++++++++++++++++++++++--------------- src/compiler/types.ts | 7 ++----- 2 files changed, 31 insertions(+), 22 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 8ad4061ddf7..88ab42b9bed 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -2623,11 +2623,16 @@ module ts { return signatures; } + // The base constructor of a class can resolve to + // undefinedType if the class has no extends clause, + // unknownType if an error occurred during resolution of the extends expression, + // nullType if the extends expression is the null value, or + // an object type with at least one construct signature. function getBaseConstructorTypeOfClass(type: InterfaceType): ObjectType { - if (!type.baseConstructorType) { + if (!type.resolvedBaseConstructorType) { let baseTypeNode = getBaseTypeNodeOfClass(type); if (!baseTypeNode) { - return type.baseConstructorType = undefinedType; + return type.resolvedBaseConstructorType = undefinedType; } if (!pushTypeResolution(type)) { return unknownType; @@ -2639,35 +2644,34 @@ module ts { } if (!popTypeResolution()) { error(type.symbol.valueDeclaration, Diagnostics._0_is_referenced_directly_or_indirectly_in_its_own_base_expression, symbolToString(type.symbol)); - return type.baseConstructorType = unknownType; + return type.resolvedBaseConstructorType = unknownType; } if (baseConstructorType !== unknownType && baseConstructorType !== nullType && !isConstructorType(baseConstructorType)) { error(baseTypeNode.expression, Diagnostics.Base_expression_is_not_of_a_constructor_function_type); - return type.baseConstructorType = unknownType; + return type.resolvedBaseConstructorType = unknownType; } - type.baseConstructorType = baseConstructorType; + type.resolvedBaseConstructorType = baseConstructorType; } - return type.baseConstructorType; + return type.resolvedBaseConstructorType; } function getBaseTypes(type: InterfaceType): ObjectType[] { - let typeWithBaseTypes = type; - if (!typeWithBaseTypes.baseTypes) { + if (!type.resolvedBaseTypes) { if (type.symbol.flags & SymbolFlags.Class) { - resolveBaseTypesOfClass(typeWithBaseTypes); + resolveBaseTypesOfClass(type); } else if (type.symbol.flags & SymbolFlags.Interface) { - resolveBaseTypesOfInterface(typeWithBaseTypes); + resolveBaseTypesOfInterface(type); } else { Debug.fail("type must be class or interface"); } } - return typeWithBaseTypes.baseTypes; + return type.resolvedBaseTypes; } - function resolveBaseTypesOfClass(type: InterfaceTypeWithBaseTypes): void { - type.baseTypes = emptyArray; + function resolveBaseTypesOfClass(type: InterfaceType): void { + type.resolvedBaseTypes = emptyArray; let baseContructorType = getBaseConstructorTypeOfClass(type); if (!(baseContructorType.flags & TypeFlags.ObjectType)) { return; @@ -2675,9 +2679,15 @@ module ts { let baseTypeNode = getBaseTypeNodeOfClass(type); let baseType: Type; if (baseContructorType.symbol && baseContructorType.symbol.flags & SymbolFlags.Class) { + // When base constructor type is a class we know that the constructors all have the same type parameters as the + // class and all return the instance type of the class. There is no need for further checks and we can apply the + // type arguments in the same manner as a type reference to get the same error reporting experience. baseType = getTypeFromClassOrInterfaceReference(baseTypeNode, baseContructorType.symbol); } else { + // The class derives from a "class-like" constructor function, check that we have at least one construct signature + // with a matching number of type parameters and use the return type of the first instantiated signature. Elsewhere + // we check that all instantiated signatures return the same type. let constructors = getInstantiatedConstructorsForTypeArguments(baseContructorType, baseTypeNode.typeArguments); if (!constructors.length) { error(baseTypeNode.expression, Diagnostics.No_base_constructor_has_the_specified_number_of_type_arguments); @@ -2697,11 +2707,11 @@ module ts { typeToString(type, /*enclosingDeclaration*/ undefined, TypeFormatFlags.WriteArrayAsGenericType)); return; } - type.baseTypes = [baseType]; + type.resolvedBaseTypes = [baseType]; } - function resolveBaseTypesOfInterface(type: InterfaceTypeWithBaseTypes): void { - type.baseTypes = []; + function resolveBaseTypesOfInterface(type: InterfaceType): void { + type.resolvedBaseTypes = []; for (let declaration of type.symbol.declarations) { if (declaration.kind === SyntaxKind.InterfaceDeclaration && getInterfaceBaseTypeNodes(declaration)) { for (let node of getInterfaceBaseTypeNodes(declaration)) { @@ -2709,7 +2719,7 @@ module ts { if (baseType !== unknownType) { if (getTargetType(baseType).flags & (TypeFlags.Class | TypeFlags.Interface)) { if (type !== baseType && !hasBaseType(baseType, type)) { - type.baseTypes.push(baseType); + type.resolvedBaseTypes.push(baseType); } else { error(declaration, Diagnostics.Type_0_recursively_references_itself_as_a_base_type, typeToString(type, /*enclosingDeclaration*/ undefined, TypeFormatFlags.WriteArrayAsGenericType)); @@ -7421,6 +7431,8 @@ module ts { if (node.expression.kind === SyntaxKind.SuperKeyword) { let superType = checkSuperExpression(node.expression); if (superType !== unknownType) { + // In super call, the candidate signatures are the matching arity signatures of the base constructor function instantiated + // with the type arguments specified in the extends clause. let baseTypeNode = getClassExtendsHeritageClauseElement(getAncestor(node, SyntaxKind.ClassDeclaration)); let baseConstructors = getInstantiatedConstructorsForTypeArguments(superType, baseTypeNode.typeArguments); return resolveCall(node, baseConstructors, candidatesOutArray); diff --git a/src/compiler/types.ts b/src/compiler/types.ts index c4c37226133..177aaf10af0 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -1660,11 +1660,8 @@ module ts { typeParameters: TypeParameter[]; // Type parameters (undefined if non-generic) outerTypeParameters: TypeParameter[]; // Outer type parameters (undefined if none) localTypeParameters: TypeParameter[]; // Local type parameters (undefined if none) - baseConstructorType?: Type; // Base constructor type of class - } - - export interface InterfaceTypeWithBaseTypes extends InterfaceType { - baseTypes: ObjectType[]; + resolvedBaseConstructorType?: Type; // Resolved base constructor type of class + resolvedBaseTypes: ObjectType[]; // Resolved base types } export interface InterfaceTypeWithDeclaredMembers extends InterfaceType { From 38e3d9f71809231a99d73b382ca8ddc351fa74b2 Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Tue, 16 Jun 2015 11:53:00 -0700 Subject: [PATCH 16/17] Adding another comment --- src/compiler/checker.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 88ab42b9bed..e0407261e9d 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -10662,6 +10662,8 @@ module ts { checkTypeAssignableTo(staticType, getTypeWithoutSignatures(staticBaseType), node.name || node, Diagnostics.Class_static_side_0_incorrectly_extends_base_class_static_side_1); if (!(staticBaseType.symbol && staticBaseType.symbol.flags & SymbolFlags.Class)) { + // When the static base type is a "class-like" constructor function (but not actually a class), we verify + // that all instantiated base constructor signatures return the same type. let constructors = getInstantiatedConstructorsForTypeArguments(staticBaseType, baseTypeNode.typeArguments); if (forEach(constructors, sig => getReturnTypeOfSignature(sig) !== baseType)) { error(baseTypeNode.expression, Diagnostics.Base_constructors_must_all_have_the_same_return_type); From f6bcf7074caac8df6b4cd9b55269315cf2f03331 Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Tue, 16 Jun 2015 12:07:49 -0700 Subject: [PATCH 17/17] Accepting new baselines after merge --- .../reference/genericTypeConstraints.errors.txt | 9 +++------ .../strictModeReservedWordInClassDeclaration.errors.txt | 7 +++++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/tests/baselines/reference/genericTypeConstraints.errors.txt b/tests/baselines/reference/genericTypeConstraints.errors.txt index 9fd8b5f15be..ae97572b56a 100644 --- a/tests/baselines/reference/genericTypeConstraints.errors.txt +++ b/tests/baselines/reference/genericTypeConstraints.errors.txt @@ -1,9 +1,8 @@ -tests/cases/compiler/genericTypeConstraints.ts(9,27): error TS2344: Type 'FooExtended' does not satisfy the constraint 'Foo'. - Property 'fooMethod' is missing in type 'FooExtended'. tests/cases/compiler/genericTypeConstraints.ts(9,31): error TS2344: Type 'FooExtended' does not satisfy the constraint 'Foo'. + Property 'fooMethod' is missing in type 'FooExtended'. -==== tests/cases/compiler/genericTypeConstraints.ts (2 errors) ==== +==== tests/cases/compiler/genericTypeConstraints.ts (1 errors) ==== class Foo { fooMethod() {} } @@ -13,11 +12,9 @@ tests/cases/compiler/genericTypeConstraints.ts(9,31): error TS2344: Type 'FooExt class Bar { } class BarExtended extends Bar { - ~~~~~~~~~~~~~~~~ -!!! error TS2344: Type 'FooExtended' does not satisfy the constraint 'Foo'. -!!! error TS2344: Property 'fooMethod' is missing in type 'FooExtended'. ~~~~~~~~~~~ !!! error TS2344: Type 'FooExtended' does not satisfy the constraint 'Foo'. +!!! error TS2344: Property 'fooMethod' is missing in type 'FooExtended'. constructor() { super(); } diff --git a/tests/baselines/reference/strictModeReservedWordInClassDeclaration.errors.txt b/tests/baselines/reference/strictModeReservedWordInClassDeclaration.errors.txt index b8e004a5ea3..0b868960bed 100644 --- a/tests/baselines/reference/strictModeReservedWordInClassDeclaration.errors.txt +++ b/tests/baselines/reference/strictModeReservedWordInClassDeclaration.errors.txt @@ -21,10 +21,11 @@ tests/cases/compiler/strictModeReservedWordInClassDeclaration.ts(26,21): error T tests/cases/compiler/strictModeReservedWordInClassDeclaration.ts(26,21): error TS2503: Cannot find namespace 'public'. tests/cases/compiler/strictModeReservedWordInClassDeclaration.ts(27,17): error TS1213: Identifier expected. 'package' is a reserved word in strict mode. Class definitions are automatically in strict mode. tests/cases/compiler/strictModeReservedWordInClassDeclaration.ts(27,17): error TS2304: Cannot find name 'package'. +tests/cases/compiler/strictModeReservedWordInClassDeclaration.ts(28,17): error TS1213: Identifier expected. 'package' is a reserved word in strict mode. Class definitions are automatically in strict mode. tests/cases/compiler/strictModeReservedWordInClassDeclaration.ts(28,17): error TS2304: Cannot find name 'package'. -==== tests/cases/compiler/strictModeReservedWordInClassDeclaration.ts (23 errors) ==== +==== tests/cases/compiler/strictModeReservedWordInClassDeclaration.ts (25 errors) ==== interface public { } class Foo { @@ -100,4 +101,6 @@ tests/cases/compiler/strictModeReservedWordInClassDeclaration.ts(28,17): error T !!! error TS2304: Cannot find name 'package'. class H extends package.A { } ~~~~~~~ -!!! error TS2304: Cannot find name 'package'. +!!! error TS1213: Identifier expected. 'package' is a reserved word in strict mode. Class definitions are automatically in strict mode. + ~~~~~~~ +!!! error TS2304: Cannot find name 'package'. \ No newline at end of file