Skip to content

Commit 8b8cd31

Browse files
authored
Use unknown serialization kind when type symbol isnt resolved (#24332)
* Use unknown serialization kind when type symbol isnt resolved * Add test for the isolated modules case
1 parent aed0eb6 commit 8b8cd31

8 files changed

+97
-4
lines changed

src/compiler/checker.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26736,7 +26736,7 @@ namespace ts {
2673626736

2673726737
// We might not be able to resolve type symbol so use unknown type in that case (eg error case)
2673826738
if (!typeSymbol) {
26739-
return TypeReferenceSerializationKind.ObjectType;
26739+
return TypeReferenceSerializationKind.Unknown;
2674026740
}
2674126741
const type = getDeclaredTypeOfSymbol(typeSymbol);
2674226742
if (type === unknownType) {

src/compiler/transformers/ts.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1964,7 +1964,8 @@ namespace ts {
19641964
* @param node The type reference node.
19651965
*/
19661966
function serializeTypeReferenceNode(node: TypeReferenceNode): SerializedTypeNode {
1967-
switch (resolver.getTypeReferenceSerializationKind(node.typeName, currentScope)) {
1967+
const kind = resolver.getTypeReferenceSerializationKind(node.typeName, currentScope);
1968+
switch (kind) {
19681969
case TypeReferenceSerializationKind.Unknown:
19691970
const serialized = serializeEntityNameAsExpression(node.typeName, /*useFallback*/ true);
19701971
const temp = createTempVariable(hoistVariableDeclaration);
@@ -2006,8 +2007,9 @@ namespace ts {
20062007
return createIdentifier("Promise");
20072008

20082009
case TypeReferenceSerializationKind.ObjectType:
2009-
default:
20102010
return createIdentifier("Object");
2011+
default:
2012+
return Debug.assertNever(kind);
20112013
}
20122014
}
20132015

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
error TS2318: Cannot find global type 'Array'.
2+
error TS2318: Cannot find global type 'Boolean'.
3+
error TS2318: Cannot find global type 'Function'.
4+
error TS2318: Cannot find global type 'IArguments'.
5+
error TS2318: Cannot find global type 'Number'.
6+
error TS2318: Cannot find global type 'Object'.
7+
error TS2318: Cannot find global type 'RegExp'.
8+
error TS2318: Cannot find global type 'String'.
9+
tests/cases/compiler/decoratorMetadataNoLibIsolatedModulesTypes.ts(2,6): error TS2304: Cannot find name 'Decorate'.
10+
tests/cases/compiler/decoratorMetadataNoLibIsolatedModulesTypes.ts(3,13): error TS2304: Cannot find name 'Map'.
11+
12+
13+
!!! error TS2318: Cannot find global type 'Array'.
14+
!!! error TS2318: Cannot find global type 'Boolean'.
15+
!!! error TS2318: Cannot find global type 'Function'.
16+
!!! error TS2318: Cannot find global type 'IArguments'.
17+
!!! error TS2318: Cannot find global type 'Number'.
18+
!!! error TS2318: Cannot find global type 'Object'.
19+
!!! error TS2318: Cannot find global type 'RegExp'.
20+
!!! error TS2318: Cannot find global type 'String'.
21+
==== tests/cases/compiler/decoratorMetadataNoLibIsolatedModulesTypes.ts (2 errors) ====
22+
export class B {
23+
@Decorate
24+
~~~~~~~~
25+
!!! error TS2304: Cannot find name 'Decorate'.
26+
member: Map<string, number>;
27+
~~~
28+
!!! error TS2304: Cannot find name 'Map'.
29+
}
30+
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
//// [decoratorMetadataNoLibIsolatedModulesTypes.ts]
2+
export class B {
3+
@Decorate
4+
member: Map<string, number>;
5+
}
6+
7+
8+
//// [decoratorMetadataNoLibIsolatedModulesTypes.js]
9+
"use strict";
10+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
11+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
12+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
13+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
14+
return c > 3 && r && Object.defineProperty(target, key, r), r;
15+
};
16+
var __metadata = (this && this.__metadata) || function (k, v) {
17+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
18+
};
19+
exports.__esModule = true;
20+
var B = /** @class */ (function () {
21+
function B() {
22+
}
23+
var _a;
24+
__decorate([
25+
Decorate,
26+
__metadata("design:type", typeof (_a = typeof Map !== "undefined" && Map) === "function" && _a || Object)
27+
], B.prototype, "member");
28+
return B;
29+
}());
30+
exports.B = B;
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
=== tests/cases/compiler/decoratorMetadataNoLibIsolatedModulesTypes.ts ===
2+
export class B {
3+
>B : Symbol(B, Decl(decoratorMetadataNoLibIsolatedModulesTypes.ts, 0, 0))
4+
5+
@Decorate
6+
member: Map<string, number>;
7+
>member : Symbol(B.member, Decl(decoratorMetadataNoLibIsolatedModulesTypes.ts, 0, 16))
8+
}
9+
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
=== tests/cases/compiler/decoratorMetadataNoLibIsolatedModulesTypes.ts ===
2+
export class B {
3+
>B : B
4+
5+
@Decorate
6+
>Decorate : any
7+
8+
member: Map<string, number>;
9+
>member : any
10+
>Map : No type information available!
11+
}
12+

tests/baselines/reference/decoratorMetadataWithImportDeclarationNameCollision7.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,10 @@ var MyClass = /** @class */ (function () {
4646
this.db = db;
4747
this.db.doSomething();
4848
}
49+
var _a;
4950
MyClass = __decorate([
5051
someDecorator,
51-
__metadata("design:paramtypes", [Object])
52+
__metadata("design:paramtypes", [typeof (_a = (typeof db_1.default !== "undefined" && db_1.default).db) === "function" && _a || Object])
5253
], MyClass);
5354
return MyClass;
5455
}());
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
// @experimentalDecorators: true
2+
// @emitDecoratorMetadata: true
3+
// @noLib: true
4+
// @isolatedModules: true
5+
6+
export class B {
7+
@Decorate
8+
member: Map<string, number>;
9+
}

0 commit comments

Comments
 (0)