From 8648b4cccf337e494b4f8fc167cc28636f55de6a Mon Sep 17 00:00:00 2001 From: Hemant <133942800+hk2166@users.noreply.github.com> Date: Tue, 18 Nov 2025 13:24:12 +0530 Subject: [PATCH] feat(compiler): improve error message when type alias is used as value #7990 --- src/compiler/checker.ts | 5 ++++ src/compiler/diagnosticMessages.json | 4 +++ tests/cases/compiler/typeAliasUsedAsValue.ts | 26 ++++++++++++++++++++ 3 files changed, 35 insertions(+) create mode 100644 tests/cases/compiler/typeAliasUsedAsValue.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index ba5765c0826a3..b33026587b4a5 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -27656,6 +27656,11 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { return Diagnostics.No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer; } else { + // Check if there's a type symbol with the same name + const typeSymbol = resolveName(node, node.escapedText, SymbolFlags.Type, /*nameNotFoundMessage*/ undefined, /*isUse*/ false); + if (typeSymbol && !(typeSymbol.flags & SymbolFlags.Value)) { + return Diagnostics.Cannot_find_name_0_1_only_refers_to_a_type_but_is_being_used_as_a_value_here; + } return Diagnostics.Cannot_find_name_0; } } diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index 75da7fcff9347..3208c29bc20c2 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -2828,6 +2828,10 @@ "category": "Error", "code": 2552 }, + "Cannot find name '{0}'. '{1}' only refers to a type, but is being used as a value here.": { + "category": "Error", + "code": 2888 + }, "Computed values are not permitted in an enum with string valued members.": { "category": "Error", "code": 2553 diff --git a/tests/cases/compiler/typeAliasUsedAsValue.ts b/tests/cases/compiler/typeAliasUsedAsValue.ts new file mode 100644 index 0000000000000..70479fa55666a --- /dev/null +++ b/tests/cases/compiler/typeAliasUsedAsValue.ts @@ -0,0 +1,26 @@ +// @filename: mytypes.ts +export class MyClass { + public a: number; +} + +export type MyClassAlias = MyClass; + +// @filename: main.ts +import {MyClassAlias} from './mytypes'; + +let a: MyClassAlias = new MyClassAlias(); // Error: should show better message +let b = MyClassAlias; // Error: should show better message + +// Test with local type alias +type LocalAlias = string; +let c = LocalAlias; // Error: should show better message + +// Test with interface +interface MyInterface { + prop: string; +} +let d = MyInterface; // Error: should show better message + +// Test with generic type alias +type GenericAlias = T[]; +let e = GenericAlias; // Error: should show better message