Skip to content

Commit 57b41d2

Browse files
committed
Fix crash related to legacy method decorators and signatures with rest
1 parent 022800b commit 57b41d2

5 files changed

Lines changed: 84 additions & 1 deletion

File tree

src/compiler/checker.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36280,7 +36280,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
3628036280
case SyntaxKind.GetAccessor:
3628136281
case SyntaxKind.SetAccessor:
3628236282
// For decorators with only two parameters we supply only two arguments
36283-
return signature.parameters.length <= 2 ? 2 : 3;
36283+
return getParameterCount(signature) <= 2 ? 2 : 3;
3628436284
case SyntaxKind.Parameter:
3628536285
return 3;
3628636286
default:
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
decoratorRestNoCrash1.ts(4,29): error TS2339: Property 'greeting' does not exist on type 'Greeter'.
2+
3+
4+
==== decoratorRestNoCrash1.ts (1 errors) ====
5+
class Greeter {
6+
@deco
7+
greet1() {
8+
return "Hello, " + this.greeting;
9+
~~~~~~~~
10+
!!! error TS2339: Property 'greeting' does not exist on type 'Greeter'.
11+
}
12+
}
13+
14+
declare function deco(...args: [any, any, any]): any;
15+
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
//// [tests/cases/compiler/decoratorRestNoCrash1.ts] ////
2+
3+
=== decoratorRestNoCrash1.ts ===
4+
class Greeter {
5+
>Greeter : Symbol(Greeter, Decl(decoratorRestNoCrash1.ts, 0, 0))
6+
7+
@deco
8+
>deco : Symbol(deco, Decl(decoratorRestNoCrash1.ts, 5, 1))
9+
10+
greet1() {
11+
>greet1 : Symbol(Greeter.greet1, Decl(decoratorRestNoCrash1.ts, 0, 15))
12+
13+
return "Hello, " + this.greeting;
14+
>this : Symbol(Greeter, Decl(decoratorRestNoCrash1.ts, 0, 0))
15+
}
16+
}
17+
18+
declare function deco(...args: [any, any, any]): any;
19+
>deco : Symbol(deco, Decl(decoratorRestNoCrash1.ts, 5, 1))
20+
>args : Symbol(args, Decl(decoratorRestNoCrash1.ts, 7, 22))
21+
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
//// [tests/cases/compiler/decoratorRestNoCrash1.ts] ////
2+
3+
=== decoratorRestNoCrash1.ts ===
4+
class Greeter {
5+
>Greeter : Greeter
6+
> : ^^^^^^^
7+
8+
@deco
9+
>deco : (args_0: any, args_1: any, args_2: any) => any
10+
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
11+
12+
greet1() {
13+
>greet1 : () => string
14+
> : ^^^^^^^^^^^^
15+
16+
return "Hello, " + this.greeting;
17+
>"Hello, " + this.greeting : string
18+
> : ^^^^^^
19+
>"Hello, " : "Hello, "
20+
> : ^^^^^^^^^
21+
>this.greeting : any
22+
> : ^^^
23+
>this : this
24+
> : ^^^^
25+
>greeting : any
26+
> : ^^^
27+
}
28+
}
29+
30+
declare function deco(...args: [any, any, any]): any;
31+
>deco : (args_0: any, args_1: any, args_2: any) => any
32+
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
33+
>args : [any, any, any]
34+
> : ^^^^^^^^^^^^^^^
35+
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
// @strict: true
2+
// @noEmit: true
3+
// @experimentalDecorators: true
4+
5+
class Greeter {
6+
@deco
7+
greet1() {
8+
return "Hello, " + this.greeting;
9+
}
10+
}
11+
12+
declare function deco(...args: [any, any, any]): any;

0 commit comments

Comments
 (0)