Skip to content

Commit cbe9b3f

Browse files
committed
Add test
1 parent 511921e commit cbe9b3f

5 files changed

+98
-0
lines changed
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
tests/cases/compiler/classImplementsMethodWIthTupleArgs.ts(2,5): error TS2416: Property 'set' in type 'MySettable' is not assignable to the same property in base type 'Settable'.
2+
Type '{ (option: Record<string, unknown>): void; (name: string, value: unknown): void; }' is not assignable to type '(...args: [option: Record<string, unknown>] | [name: string, value: unknown] | [name: string]) => void'.
3+
Types of parameters 'option' and 'args' are incompatible.
4+
Type '[option: Record<string, unknown>] | [name: string, value: unknown] | [name: string]' is not assignable to type 'readonly [option: Record<string, unknown>]'.
5+
Type '[name: string, value: unknown]' is not assignable to type 'readonly [option: Record<string, unknown>]'.
6+
Source has 2 element(s) but target allows only 1.
7+
tests/cases/compiler/classImplementsMethodWIthTupleArgs.ts(3,5): error TS2416: Property 'set' in type 'MySettable' is not assignable to the same property in base type 'Settable'.
8+
Type '{ (option: Record<string, unknown>): void; (name: string, value: unknown): void; }' is not assignable to type '(...args: [option: Record<string, unknown>] | [name: string, value: unknown] | [name: string]) => void'.
9+
10+
11+
==== tests/cases/compiler/classImplementsMethodWIthTupleArgs.ts (2 errors) ====
12+
declare class MySettable implements Settable {
13+
set(option: Record<string, unknown>): void;
14+
~~~
15+
!!! error TS2416: Property 'set' in type 'MySettable' is not assignable to the same property in base type 'Settable'.
16+
!!! error TS2416: Type '{ (option: Record<string, unknown>): void; (name: string, value: unknown): void; }' is not assignable to type '(...args: [option: Record<string, unknown>] | [name: string, value: unknown] | [name: string]) => void'.
17+
!!! error TS2416: Types of parameters 'option' and 'args' are incompatible.
18+
!!! error TS2416: Type '[option: Record<string, unknown>] | [name: string, value: unknown] | [name: string]' is not assignable to type 'readonly [option: Record<string, unknown>]'.
19+
!!! error TS2416: Type '[name: string, value: unknown]' is not assignable to type 'readonly [option: Record<string, unknown>]'.
20+
!!! error TS2416: Source has 2 element(s) but target allows only 1.
21+
set(name: string, value: unknown): void;
22+
~~~
23+
!!! error TS2416: Property 'set' in type 'MySettable' is not assignable to the same property in base type 'Settable'.
24+
!!! error TS2416: Type '{ (option: Record<string, unknown>): void; (name: string, value: unknown): void; }' is not assignable to type '(...args: [option: Record<string, unknown>] | [name: string, value: unknown] | [name: string]) => void'.
25+
}
26+
27+
interface Settable {
28+
set(...args: [option: Record<string, unknown>] | [name: string, value: unknown] | [name: string]): void;
29+
}
30+
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
//// [classImplementsMethodWIthTupleArgs.ts]
2+
declare class MySettable implements Settable {
3+
set(option: Record<string, unknown>): void;
4+
set(name: string, value: unknown): void;
5+
}
6+
7+
interface Settable {
8+
set(...args: [option: Record<string, unknown>] | [name: string, value: unknown] | [name: string]): void;
9+
}
10+
11+
12+
//// [classImplementsMethodWIthTupleArgs.js]
13+
"use strict";
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
=== tests/cases/compiler/classImplementsMethodWIthTupleArgs.ts ===
2+
declare class MySettable implements Settable {
3+
>MySettable : Symbol(MySettable, Decl(classImplementsMethodWIthTupleArgs.ts, 0, 0))
4+
>Settable : Symbol(Settable, Decl(classImplementsMethodWIthTupleArgs.ts, 3, 1))
5+
6+
set(option: Record<string, unknown>): void;
7+
>set : Symbol(MySettable.set, Decl(classImplementsMethodWIthTupleArgs.ts, 0, 46), Decl(classImplementsMethodWIthTupleArgs.ts, 1, 47))
8+
>option : Symbol(option, Decl(classImplementsMethodWIthTupleArgs.ts, 1, 8))
9+
>Record : Symbol(Record, Decl(lib.es5.d.ts, --, --))
10+
11+
set(name: string, value: unknown): void;
12+
>set : Symbol(MySettable.set, Decl(classImplementsMethodWIthTupleArgs.ts, 0, 46), Decl(classImplementsMethodWIthTupleArgs.ts, 1, 47))
13+
>name : Symbol(name, Decl(classImplementsMethodWIthTupleArgs.ts, 2, 8))
14+
>value : Symbol(value, Decl(classImplementsMethodWIthTupleArgs.ts, 2, 21))
15+
}
16+
17+
interface Settable {
18+
>Settable : Symbol(Settable, Decl(classImplementsMethodWIthTupleArgs.ts, 3, 1))
19+
20+
set(...args: [option: Record<string, unknown>] | [name: string, value: unknown] | [name: string]): void;
21+
>set : Symbol(Settable.set, Decl(classImplementsMethodWIthTupleArgs.ts, 5, 20))
22+
>args : Symbol(args, Decl(classImplementsMethodWIthTupleArgs.ts, 6, 8))
23+
>Record : Symbol(Record, Decl(lib.es5.d.ts, --, --))
24+
}
25+
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
=== tests/cases/compiler/classImplementsMethodWIthTupleArgs.ts ===
2+
declare class MySettable implements Settable {
3+
>MySettable : MySettable
4+
5+
set(option: Record<string, unknown>): void;
6+
>set : { (option: Record<string, unknown>): void; (name: string, value: unknown): void; }
7+
>option : Record<string, unknown>
8+
9+
set(name: string, value: unknown): void;
10+
>set : { (option: Record<string, unknown>): void; (name: string, value: unknown): void; }
11+
>name : string
12+
>value : unknown
13+
}
14+
15+
interface Settable {
16+
set(...args: [option: Record<string, unknown>] | [name: string, value: unknown] | [name: string]): void;
17+
>set : (...args: [option: Record<string, unknown>] | [name: string, value: unknown] | [name: string]) => void
18+
>args : [option: Record<string, unknown>] | [name: string, value: unknown] | [name: string]
19+
}
20+
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// @strict: true
2+
3+
declare class MySettable implements Settable {
4+
set(option: Record<string, unknown>): void;
5+
set(name: string, value: unknown): void;
6+
}
7+
8+
interface Settable {
9+
set(...args: [option: Record<string, unknown>] | [name: string, value: unknown] | [name: string]): void;
10+
}

0 commit comments

Comments
 (0)