Skip to content

Commit 05691ba

Browse files
maxpatiiukaugustjk
andauthored
feat(task): improve type checking for tuples (lit#4836)
--------- Co-authored-by: Augustine Kim <augustjkim@gmail.com>
1 parent 37c0250 commit 05691ba

File tree

4 files changed

+37
-5
lines changed

4 files changed

+37
-5
lines changed

.changeset/wicked-rabbits-trade.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@lit/task': patch
3+
---
4+
5+
Improve type inference of tuples returned by the args function being used as task function parameter.

packages/labs/task/src/test/task_test.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -759,7 +759,7 @@ suite('Task', () => {
759759
});
760760

761761
test('Elements only render once for pending tasks', async () => {
762-
let resolveTask: (v: unknown) => void;
762+
let resolveTask: (v: any) => void;
763763
let renderCount = 0;
764764
class TestElement extends ReactiveElement {
765765
task = new Task(this, {

packages/task/src/task.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -166,8 +166,8 @@ export interface TaskConfig<T extends ReadonlyArray<unknown>, R> {
166166
* ```
167167
*/
168168
export class Task<
169-
T extends ReadonlyArray<unknown> = ReadonlyArray<unknown>,
170-
R = unknown,
169+
const T extends ReadonlyArray<unknown> = ReadonlyArray<unknown>,
170+
const R = unknown,
171171
> {
172172
private _previousArgs?: T;
173173
private _task: TaskFunction<T, R>;
@@ -227,12 +227,12 @@ export class Task<
227227
private _rejectTaskComplete?: (e: unknown) => void;
228228
private _taskComplete?: Promise<R>;
229229

230+
constructor(host: ReactiveControllerHost, task: TaskConfig<T, R>);
230231
constructor(
231232
host: ReactiveControllerHost,
232233
task: TaskFunction<T, R>,
233234
args?: ArgsFunction<T>
234235
);
235-
constructor(host: ReactiveControllerHost, task: TaskConfig<T, R>);
236236
constructor(
237237
host: ReactiveControllerHost,
238238
task: TaskFunction<T, R> | TaskConfig<T, R>,

packages/task/src/test/task_test.ts

+28-1
Original file line numberDiff line numberDiff line change
@@ -759,7 +759,7 @@ suite('Task', () => {
759759
});
760760

761761
test('Elements only render once for pending tasks', async () => {
762-
let resolveTask: (v: unknown) => void;
762+
let resolveTask: (v: any) => void;
763763
let renderCount = 0;
764764
class TestElement extends ReactiveElement {
765765
task = new Task(this, {
@@ -1072,4 +1072,31 @@ suite('Task', () => {
10721072
})
10731073
);
10741074
});
1075+
1076+
test('tuple type arguments are inferred without need for "as const"', () => {
1077+
const expectType = <T>(x: T) => x;
1078+
1079+
class TestElement extends ReactiveElement {
1080+
string = '';
1081+
number = 1;
1082+
1083+
task = new Task(
1084+
this,
1085+
([string, number]) => {
1086+
expectType<string>(string);
1087+
expectType<number>(number);
1088+
},
1089+
() => [this.string, this.number]
1090+
);
1091+
1092+
task2 = new Task(this, {
1093+
task: ([string, number]) => {
1094+
expectType<string>(string);
1095+
expectType<number>(number);
1096+
},
1097+
args: () => [this.string, this.number],
1098+
});
1099+
}
1100+
TestElement;
1101+
});
10751102
});

0 commit comments

Comments
 (0)