Skip to content
3 changes: 3 additions & 0 deletions src/compiler/checker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44682,6 +44682,9 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
: Diagnostics.An_export_default_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers_to_a_type,
idText(id));
}
else if (!node.isExportEquals && !(node.flags & NodeFlags.Ambient) && (getTypeOnlyAliasDeclaration(sym, /*include*/ undefined) || ((getAllSymbolFlags(sym) & SymbolFlags.Value) === 0))) {
error(id, Diagnostics._0_only_refers_to_a_type_but_is_being_used_as_a_value_here, idText(id));
}
}
else {
checkExpressionCached(id); // doesn't resolve, check as expression to mark as error
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
color.ts(4,16): error TS2693: 'Color' only refers to a type, but is being used as a value here.


==== color.ts (1 errors) ====
interface Color {
c: string;
}
export default Color;
~~~~~
!!! error TS2693: 'Color' only refers to a type, but is being used as a value here.
==== file1.ts (0 errors) ====
import Color from "./color";
export declare function styled(): Color;
==== file2.ts (0 errors) ====
import { styled } from "./file1";
export const A = styled();
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
/foo/test.ts(4,16): error TS2693: 'Foo' only refers to a type, but is being used as a value here.


==== /foo/tsconfig.json (0 errors) ====
{
"compilerOptions": { "composite": true, "declarationDir": "out" }
}

==== /foo/test.ts (1 errors) ====
interface Foo {
x: number;
}
export default Foo;
~~~
!!! error TS2693: 'Foo' only refers to a type, but is being used as a value here.

Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
/foo/test.ts(4,16): error TS2693: 'Foo' only refers to a type, but is being used as a value here.


==== /foo/tsconfig.json (0 errors) ====
{
"compilerOptions": { "declaration": true, "declarationDir": "out" }
}

==== /foo/test.ts (1 errors) ====
interface Foo {
x: number;
}
export default Foo;
~~~
!!! error TS2693: 'Foo' only refers to a type, but is being used as a value here.

Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
/foo/tsconfig.json(2,26): error TS5069: Option 'declarationDir' cannot be specified without specifying option 'declaration' or option 'composite'.
/foo/test.ts(4,16): error TS2693: 'Foo' only refers to a type, but is being used as a value here.


==== /foo/tsconfig.json (1 errors) ====
Expand All @@ -8,9 +9,11 @@
!!! error TS5069: Option 'declarationDir' cannot be specified without specifying option 'declaration' or option 'composite'.
}

==== /foo/test.ts (0 errors) ====
==== /foo/test.ts (1 errors) ====
interface Foo {
x: number;
}
export default Foo;
~~~
!!! error TS2693: 'Foo' only refers to a type, but is being used as a value here.

16 changes: 16 additions & 0 deletions tests/baselines/reference/declarationEmitWithComposite.errors.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
/foo/test.ts(4,16): error TS2693: 'Foo' only refers to a type, but is being used as a value here.


==== /foo/tsconfig.json (0 errors) ====
{
"compilerOptions": { "composite": true, "outDir": "out" }
}

==== /foo/test.ts (1 errors) ====
interface Foo {
x: number;
}
export default Foo;
~~~
!!! error TS2693: 'Foo' only refers to a type, but is being used as a value here.

Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
exportDefaultAlias_excludesEverything.ts(1,26): error TS2528: A module cannot have multiple default exports.
exportDefaultAlias_excludesEverything.ts(3,16): error TS2528: A module cannot have multiple default exports.
exportDefaultAlias_excludesEverything.ts(3,16): error TS2693: 'B' only refers to a type, but is being used as a value here.


==== exportDefaultAlias_excludesEverything.ts (2 errors) ====
==== exportDefaultAlias_excludesEverything.ts (3 errors) ====
export default interface A {}
~
!!! error TS2528: A module cannot have multiple default exports.
Expand All @@ -12,4 +13,6 @@ exportDefaultAlias_excludesEverything.ts(3,16): error TS2528: A module cannot ha
~
!!! error TS2528: A module cannot have multiple default exports.
!!! related TS2752 exportDefaultAlias_excludesEverything.ts:1:26: The first export default is here.
~
!!! error TS2693: 'B' only refers to a type, but is being used as a value here.

Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
exportDefaultForNonInstantiatedModule.ts(6,16): error TS2693: 'm' only refers to a type, but is being used as a value here.


==== exportDefaultForNonInstantiatedModule.ts (1 errors) ====
module m {
export interface foo {
}
}
// Should not be emitted
export default m;
~
!!! error TS2693: 'm' only refers to a type, but is being used as a value here.
13 changes: 13 additions & 0 deletions tests/baselines/reference/exportDefaultImportedType.errors.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
/main.ts(2,16): error TS2693: 'Foo' only refers to a type, but is being used as a value here.


==== /exported.ts (0 errors) ====
type Foo = number;
export { Foo };

==== /main.ts (1 errors) ====
import { Foo } from "./exported";
export default Foo;
~~~
!!! error TS2693: 'Foo' only refers to a type, but is being used as a value here.

Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
exportDefaultTypeAndClass.ts(1,22): error TS2528: A module cannot have multiple default exports.
exportDefaultTypeAndClass.ts(3,16): error TS2528: A module cannot have multiple default exports.
exportDefaultTypeAndClass.ts(3,16): error TS2693: 'Bar' only refers to a type, but is being used as a value here.


==== exportDefaultTypeAndClass.ts (2 errors) ====
==== exportDefaultTypeAndClass.ts (3 errors) ====
export default class Foo {}
~~~
!!! error TS2528: A module cannot have multiple default exports.
Expand All @@ -12,4 +13,6 @@ exportDefaultTypeAndClass.ts(3,16): error TS2528: A module cannot have multiple
~~~
!!! error TS2528: A module cannot have multiple default exports.
!!! related TS2752 exportDefaultTypeAndClass.ts:1:22: The first export default is here.
~~~
!!! error TS2693: 'Bar' only refers to a type, but is being used as a value here.

Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@ exportDefaultTypeAndFunctionOverloads.ts(1,25): error TS2528: A module cannot ha
exportDefaultTypeAndFunctionOverloads.ts(2,25): error TS2528: A module cannot have multiple default exports.
exportDefaultTypeAndFunctionOverloads.ts(3,25): error TS2528: A module cannot have multiple default exports.
exportDefaultTypeAndFunctionOverloads.ts(7,16): error TS2528: A module cannot have multiple default exports.
exportDefaultTypeAndFunctionOverloads.ts(7,16): error TS2693: 'Foo' only refers to a type, but is being used as a value here.


==== exportDefaultTypeAndFunctionOverloads.ts (4 errors) ====
==== exportDefaultTypeAndFunctionOverloads.ts (5 errors) ====
export default function foo(value: number): number
~~~
!!! error TS2528: A module cannot have multiple default exports.
Expand All @@ -26,4 +27,6 @@ exportDefaultTypeAndFunctionOverloads.ts(7,16): error TS2528: A module cannot ha
!!! related TS2752 exportDefaultTypeAndFunctionOverloads.ts:1:25: The first export default is here.
!!! related TS2752 exportDefaultTypeAndFunctionOverloads.ts:2:25: The first export default is here.
!!! related TS2752 exportDefaultTypeAndFunctionOverloads.ts:3:25: The first export default is here.
~~~
!!! error TS2693: 'Foo' only refers to a type, but is being used as a value here.

Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,10 @@ exportDefaultTypeClassAndValue.ts(2,16): error TS2528: A module cannot have mult
exportDefaultTypeClassAndValue.ts(3,22): error TS2323: Cannot redeclare exported variable 'default'.
exportDefaultTypeClassAndValue.ts(3,22): error TS2528: A module cannot have multiple default exports.
exportDefaultTypeClassAndValue.ts(5,16): error TS2528: A module cannot have multiple default exports.
exportDefaultTypeClassAndValue.ts(5,16): error TS2693: 'Bar' only refers to a type, but is being used as a value here.


==== exportDefaultTypeClassAndValue.ts (5 errors) ====
==== exportDefaultTypeClassAndValue.ts (6 errors) ====
const foo = 1
export default foo
~~~~~~~~~~~~~~~~~~
Expand All @@ -25,4 +26,6 @@ exportDefaultTypeClassAndValue.ts(5,16): error TS2528: A module cannot have mult
!!! error TS2528: A module cannot have multiple default exports.
!!! related TS2752 exportDefaultTypeClassAndValue.ts:2:16: The first export default is here.
!!! related TS2752 exportDefaultTypeClassAndValue.ts:3:22: The first export default is here.
~~~
!!! error TS2693: 'Bar' only refers to a type, but is being used as a value here.

21 changes: 21 additions & 0 deletions tests/baselines/reference/moduleAugmentationOfAlias.errors.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
/a.ts(2,16): error TS2693: 'I' only refers to a type, but is being used as a value here.


==== /a.ts (1 errors) ====
interface I {}
export default I;
~
!!! error TS2693: 'I' only refers to a type, but is being used as a value here.

==== /b.ts (0 errors) ====
export {};
declare module './a' {
export default interface I { x: number; }
}

==== /c.ts (0 errors) ====
import I from "./a";
function f(i: I) {
i.x;
}

Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,11 @@ Output::

[12:00:09 AM] Building project '/src/core/tsconfig.json'...

src/animals/index.ts:3:16 - error TS2693: 'Animal' only refers to a type, but is being used as a value here.

3 export default Animal;
   ~~~~~~

src/animals/index.ts:1:20 - error TS6059: File '/src/animals/animal.ts' is not under 'rootDir' '/src/core'. 'rootDir' is expected to contain all source files.

1 import Animal from './animal';
Expand Down Expand Up @@ -217,13 +222,13 @@ Output::
[12:00:18 AM] Skipping build of project '/src/zoo/tsconfig.json' because its dependency '/src/animals' was not built


Found 7 errors.
Found 8 errors.

exitCode:: ExitStatus.DiagnosticsPresent_OutputsSkipped


//// [/src/lib/core/tsconfig.tsbuildinfo]
{"program":{"fileNames":["../../../lib/lib.d.ts","../../animals/animal.ts","../../animals/dog.ts","../../animals/index.ts","../../core/utilities.ts"],"fileInfos":[{"version":"3858781397-/// <reference no-default-lib=\"true\"/>\ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array<T> { length: number; [n: number]: T; }\ninterface ReadonlyArray<T> {}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true},"-14984181202-export type Size = \"small\" | \"medium\" | \"large\";\r\nexport default interface Animal {\r\n size: Size;\r\n}\r\n","-10991948013-import Animal from '.';\r\nimport { makeRandomName } from '../core/utilities';\r\n\r\nexport interface Dog extends Animal {\r\n woof(): void;\r\n name: string;\r\n}\r\n\r\nexport function createDog(): Dog {\r\n return ({\r\n size: \"medium\",\r\n woof: function(this: Dog) {\r\n console.log(`${this.name} says \"Woof\"!`);\r\n },\r\n name: makeRandomName()\r\n });\r\n}\r\n\r\n","-5382672599-import Animal from './animal';\r\n\r\nexport default Animal;\r\nimport { createDog, Dog } from './dog';\r\nexport { createDog, Dog };\r\n","-15713992787-import * as A from '../animals';\n\r\nexport function makeRandomName() {\r\n return \"Bob!?! \";\r\n}\r\n\r\nexport function lastElementOf<T>(arr: T[]): T | undefined {\r\n if (arr.length === 0) return undefined;\r\n return arr[arr.length - 1];\r\n}\r\n\r\n"],"root":[5],"options":{"composite":true,"declaration":true,"module":1,"noFallthroughCasesInSwitch":true,"noImplicitReturns":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./","rootDir":"../../core","strict":true,"target":1},"fileIdsList":[[4,5],[2,3],[4]],"referencedMap":[[3,1],[4,2],[5,3]],"exportedModulesMap":[[3,1],[4,2],[5,3]],"semanticDiagnosticsPerFile":[1,2,3,4,[5,[{"file":"../../core/utilities.ts","start":0,"length":32,"messageText":"'A' is declared but its value is never read.","category":1,"code":6133,"reportsUnnecessary":true}]]],"affectedFilesPendingEmit":[2,3,4,5],"emitSignatures":[2,3,4,5]},"version":"FakeTSVersion"}
{"program":{"fileNames":["../../../lib/lib.d.ts","../../animals/animal.ts","../../animals/dog.ts","../../animals/index.ts","../../core/utilities.ts"],"fileInfos":[{"version":"3858781397-/// <reference no-default-lib=\"true\"/>\ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array<T> { length: number; [n: number]: T; }\ninterface ReadonlyArray<T> {}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true},"-14984181202-export type Size = \"small\" | \"medium\" | \"large\";\r\nexport default interface Animal {\r\n size: Size;\r\n}\r\n","-10991948013-import Animal from '.';\r\nimport { makeRandomName } from '../core/utilities';\r\n\r\nexport interface Dog extends Animal {\r\n woof(): void;\r\n name: string;\r\n}\r\n\r\nexport function createDog(): Dog {\r\n return ({\r\n size: \"medium\",\r\n woof: function(this: Dog) {\r\n console.log(`${this.name} says \"Woof\"!`);\r\n },\r\n name: makeRandomName()\r\n });\r\n}\r\n\r\n","-5382672599-import Animal from './animal';\r\n\r\nexport default Animal;\r\nimport { createDog, Dog } from './dog';\r\nexport { createDog, Dog };\r\n","-15713992787-import * as A from '../animals';\n\r\nexport function makeRandomName() {\r\n return \"Bob!?! \";\r\n}\r\n\r\nexport function lastElementOf<T>(arr: T[]): T | undefined {\r\n if (arr.length === 0) return undefined;\r\n return arr[arr.length - 1];\r\n}\r\n\r\n"],"root":[5],"options":{"composite":true,"declaration":true,"module":1,"noFallthroughCasesInSwitch":true,"noImplicitReturns":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./","rootDir":"../../core","strict":true,"target":1},"fileIdsList":[[4,5],[2,3],[4]],"referencedMap":[[3,1],[4,2],[5,3]],"exportedModulesMap":[[3,1],[4,2],[5,3]],"semanticDiagnosticsPerFile":[1,2,3,[4,[{"file":"../../animals/index.ts","start":49,"length":6,"messageText":"'Animal' only refers to a type, but is being used as a value here.","category":1,"code":2693}]],[5,[{"file":"../../core/utilities.ts","start":0,"length":32,"messageText":"'A' is declared but its value is never read.","category":1,"code":6133,"reportsUnnecessary":true}]]],"affectedFilesPendingEmit":[2,3,4,5],"emitSignatures":[2,3,4,5]},"version":"FakeTSVersion"}

//// [/src/lib/core/tsconfig.tsbuildinfo.readable.baseline.txt]
{
Expand Down Expand Up @@ -324,7 +329,19 @@ exitCode:: ExitStatus.DiagnosticsPresent_OutputsSkipped
"../../../lib/lib.d.ts",
"../../animals/animal.ts",
"../../animals/dog.ts",
"../../animals/index.ts",
[
"../../animals/index.ts",
[
{
"file": "../../animals/index.ts",
"start": 49,
"length": 6,
"messageText": "'Animal' only refers to a type, but is being used as a value here.",
"category": 1,
"code": 2693
}
]
],
[
"../../core/utilities.ts",
[
Expand Down Expand Up @@ -366,6 +383,6 @@ exitCode:: ExitStatus.DiagnosticsPresent_OutputsSkipped
]
},
"version": "FakeTSVersion",
"size": 2309
"size": 2477
}

Loading