From 8ff539245c84f68e25f85e2c178c67f9a97781e9 Mon Sep 17 00:00:00 2001 From: Prateek Goel Date: Sat, 20 Oct 2018 23:58:59 +0530 Subject: [PATCH 1/2] Error messages for extending a specific type --- src/compiler/checker.ts | 4 ++-- src/compiler/diagnosticMessages.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 327004f776d..f8f97be48cb 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -5831,7 +5831,7 @@ namespace ts { } } else { - error(node, Diagnostics.An_interface_may_only_extend_a_class_or_another_interface); + error(node, Diagnostics.An_interface_can_only_extend_an_object_or_intersection_type_with_statically_known_members); } } } @@ -25979,7 +25979,7 @@ namespace ts { } } else { - error(typeRefNode, Diagnostics.A_class_may_only_implement_another_class_or_interface); + error(typeRefNode, Diagnostics.A_class_can_only_implement_an_object_or_intersection_type_with_statically_known_members); } } } diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index 558c45bf2af..4175b3151c0 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -1056,7 +1056,7 @@ "category": "Error", "code": 2311 }, - "An interface may only extend a class or another interface.": { + "An interface can only extend an object or intersection type with statically known members.": { "category": "Error", "code": 2312 }, @@ -1484,7 +1484,7 @@ "category": "Error", "code": 2420 }, - "A class may only implement another class or interface.": { + "A class can only implement an object or intersection type with statically known members.": { "category": "Error", "code": 2422 }, From 1666a561bc20afdc09507a2c53ae76fc0ef42d3b Mon Sep 17 00:00:00 2001 From: Prateek Goel Date: Sun, 21 Oct 2018 23:19:34 +0530 Subject: [PATCH 2/2] Error messages and tests --- src/compiler/checker.ts | 6 +++--- src/compiler/diagnosticMessages.json | 6 +++--- .../reference/inheritFromGenericTypeParameter.errors.txt | 4 ++-- .../interfaceExtendsObjectIntersectionErrors.errors.txt | 8 ++++---- .../reference/typeParameterAsBaseClass.errors.txt | 4 ++-- .../reference/typeParameterAsBaseType.errors.txt | 8 ++++---- 6 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index f8f97be48cb..2ead8d36b00 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -5773,7 +5773,7 @@ namespace ts { return type.resolvedBaseTypes = emptyArray; } if (!isValidBaseType(baseType)) { - error(baseTypeNode.expression, Diagnostics.Base_constructor_return_type_0_is_not_a_class_or_interface_type, typeToString(baseType)); + error(baseTypeNode.expression, Diagnostics.Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_known_members, typeToString(baseType)); return type.resolvedBaseTypes = emptyArray; } if (type === baseType || hasBaseType(baseType, type)) { @@ -5831,7 +5831,7 @@ namespace ts { } } else { - error(node, Diagnostics.An_interface_can_only_extend_an_object_or_intersection_type_with_statically_known_members); + error(node, Diagnostics.An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_members); } } } @@ -25979,7 +25979,7 @@ namespace ts { } } else { - error(typeRefNode, Diagnostics.A_class_can_only_implement_an_object_or_intersection_type_with_statically_known_members); + error(typeRefNode, Diagnostics.A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_members); } } } diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index 4175b3151c0..ea294b6397b 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -1056,7 +1056,7 @@ "category": "Error", "code": 2311 }, - "An interface can only extend an object or intersection type with statically known members.": { + "An interface can only extend an object type or intersection of object types with statically known members.": { "category": "Error", "code": 2312 }, @@ -1484,7 +1484,7 @@ "category": "Error", "code": 2420 }, - "A class can only implement an object or intersection type with statically known members.": { + "A class can only implement an object type or intersection of object types with statically known members.": { "category": "Error", "code": 2422 }, @@ -1816,7 +1816,7 @@ "category": "Error", "code": 2508 }, - "Base constructor return type '{0}' is not a class or interface type.": { + "Base constructor return type '{0}' is not an object type or intersection of object types with statically known members.": { "category": "Error", "code": 2509 }, diff --git a/tests/baselines/reference/inheritFromGenericTypeParameter.errors.txt b/tests/baselines/reference/inheritFromGenericTypeParameter.errors.txt index c043e37575c..f0618a06253 100644 --- a/tests/baselines/reference/inheritFromGenericTypeParameter.errors.txt +++ b/tests/baselines/reference/inheritFromGenericTypeParameter.errors.txt @@ -1,5 +1,5 @@ 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,24): error TS2312: An interface can only extend an object type or intersection of object types with statically known members. ==== tests/cases/compiler/inheritFromGenericTypeParameter.ts (2 errors) ==== @@ -8,4 +8,4 @@ tests/cases/compiler/inheritFromGenericTypeParameter.ts(2,24): error TS2312: An !!! 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 +!!! error TS2312: An interface can only extend an object type or intersection of object types with statically known members. \ No newline at end of file diff --git a/tests/baselines/reference/interfaceExtendsObjectIntersectionErrors.errors.txt b/tests/baselines/reference/interfaceExtendsObjectIntersectionErrors.errors.txt index 87faadeb4a6..17cb5585cf8 100644 --- a/tests/baselines/reference/interfaceExtendsObjectIntersectionErrors.errors.txt +++ b/tests/baselines/reference/interfaceExtendsObjectIntersectionErrors.errors.txt @@ -51,8 +51,8 @@ tests/cases/conformance/interfaces/interfaceDeclarations/interfaceExtendsObjectI Type 'I23' is not assignable to type 'T1'. Types of property 'a' are incompatible. Type 'string' is not assignable to type 'number'. -tests/cases/conformance/interfaces/interfaceDeclarations/interfaceExtendsObjectIntersectionErrors.ts(46,23): error TS2312: An interface may only extend a class or another interface. -tests/cases/conformance/interfaces/interfaceDeclarations/interfaceExtendsObjectIntersectionErrors.ts(47,26): error TS2312: An interface may only extend a class or another interface. +tests/cases/conformance/interfaces/interfaceDeclarations/interfaceExtendsObjectIntersectionErrors.ts(46,23): error TS2312: An interface can only extend an object type or intersection of object types with statically known members. +tests/cases/conformance/interfaces/interfaceDeclarations/interfaceExtendsObjectIntersectionErrors.ts(47,26): error TS2312: An interface can only extend an object type or intersection of object types with statically known members. ==== tests/cases/conformance/interfaces/interfaceDeclarations/interfaceExtendsObjectIntersectionErrors.ts (23 errors) ==== @@ -177,8 +177,8 @@ tests/cases/conformance/interfaces/interfaceDeclarations/interfaceExtendsObjectI interface I30 extends U { x: string } ~ -!!! error TS2312: An interface may only extend a class or another interface. +!!! error TS2312: An interface can only extend an object type or intersection of object types with statically known members. interface I31 extends T { x: string } ~ -!!! error TS2312: An interface may only extend a class or another interface. +!!! error TS2312: An interface can only extend an object type or intersection of object types with statically known members. \ No newline at end of file diff --git a/tests/baselines/reference/typeParameterAsBaseClass.errors.txt b/tests/baselines/reference/typeParameterAsBaseClass.errors.txt index dec7f7f2a4a..9a8706b4c93 100644 --- a/tests/baselines/reference/typeParameterAsBaseClass.errors.txt +++ b/tests/baselines/reference/typeParameterAsBaseClass.errors.txt @@ -1,5 +1,5 @@ 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,24): error TS2422: A class can only implement an object type or intersection of object types with statically known members. ==== tests/cases/compiler/typeParameterAsBaseClass.ts (2 errors) ==== @@ -8,4 +8,4 @@ tests/cases/compiler/typeParameterAsBaseClass.ts(2,24): error TS2422: A class ma !!! 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 +!!! error TS2422: A class can only implement an object type or intersection of object types with statically known members. \ No newline at end of file diff --git a/tests/baselines/reference/typeParameterAsBaseType.errors.txt b/tests/baselines/reference/typeParameterAsBaseType.errors.txt index 835b2369948..63a1ab8bd14 100644 --- a/tests/baselines/reference/typeParameterAsBaseType.errors.txt +++ b/tests/baselines/reference/typeParameterAsBaseType.errors.txt @@ -1,7 +1,7 @@ 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. +tests/cases/conformance/types/typeParameters/typeParameterAsBaseType.ts(7,24): error TS2312: An interface can only extend an object type or intersection of object types with statically known members. +tests/cases/conformance/types/typeParameters/typeParameterAsBaseType.ts(8,28): error TS2312: An interface can only extend an object type or intersection of object types with statically known members. ==== tests/cases/conformance/types/typeParameters/typeParameterAsBaseType.ts (4 errors) ==== @@ -17,9 +17,9 @@ tests/cases/conformance/types/typeParameters/typeParameterAsBaseType.ts(8,28): e interface I extends T { } ~ -!!! error TS2312: An interface may only extend a class or another interface. +!!! error TS2312: An interface can only extend an object type or intersection of object types with statically known members. interface I2 extends U { } ~ -!!! error TS2312: An interface may only extend a class or another interface. +!!! error TS2312: An interface can only extend an object type or intersection of object types with statically known members. \ No newline at end of file