diff --git a/types/task-worklet/index.d.ts b/types/task-worklet/index.d.ts index e1c68ffd84..69e52bf4ef 100644 --- a/types/task-worklet/index.d.ts +++ b/types/task-worklet/index.d.ts @@ -2,11 +2,11 @@ // Project: https://github.com/GoogleChromeLabs/task-worklet // Definitions by: Karol Majewski // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped -// TypeScript Version: 3.1 +// TypeScript Version: 2.9 -declare class TaskQueue { +declare class TaskQueue { constructor(options?: Options); - postTask(taskName: U['name'], ...args: Parameters): Task>; + postTask(taskName: string, ...args: any[]): Task; addModule(moduleURL: string): Promise; } @@ -14,12 +14,7 @@ interface Options { size?: number; } -interface TaskDescriptor { - name: string; - (...args: any): any; -} - -export interface Task { +export interface Task { id: number; state: State; result: Promise; diff --git a/types/task-worklet/package.json b/types/task-worklet/package.json new file mode 100644 index 0000000000..49b3fec869 --- /dev/null +++ b/types/task-worklet/package.json @@ -0,0 +1,14 @@ +{ + "private": true, + "types": "index", + "typesVersions": { + ">=3.1.0-0": { + "*": [ + "ts3.1/*" + ] + } + }, + "dependencies": { + "typescript": ">2.9.0" + } +} diff --git a/types/task-worklet/task-worklet-tests.ts b/types/task-worklet/task-worklet-tests.ts index 30a5072a2b..c4abfe898b 100644 --- a/types/task-worklet/task-worklet-tests.ts +++ b/types/task-worklet/task-worklet-tests.ts @@ -5,16 +5,16 @@ interface Fetcher { (input: RequestInfo, init?: RequestInit): Promise; } -const unsafe = new TaskQueue(); // $ExpectType TaskQueue -const withEmptyOptions = new TaskQueue({}); // $ExpectType TaskQueue -const withValidOptions = new TaskQueue({ size: 2 }); // $ExpectType TaskQueue +const unsafe = new TaskQueue(); // $ExpectType TaskQueue +const withEmptyOptions = new TaskQueue({}); // $ExpectType TaskQueue +const withValidOptions = new TaskQueue({ size: 2 }); // $ExpectType TaskQueue -const queue = new TaskQueue(); // $ExpectType TaskQueue +const queue = new TaskQueue(); // $ExpectType TaskQueue queue.addModule('/fetcher-worklet.js'); // $ExpectType Promise -const task = queue.postTask('fetch', 'https://example.com'); // $ExpectType Task> +const task = queue.postTask('fetch', 'https://example.com'); // $ExpectType Task async () => { - const result = await task.result; // $ExpectType Response + const result = await task.result; // $ExpectType any const id = task.id; // $ExpectType number const state = task.state; // $ExpectType State }; diff --git a/types/task-worklet/ts3.1/index.d.ts b/types/task-worklet/ts3.1/index.d.ts new file mode 100644 index 0000000000..158b9b40af --- /dev/null +++ b/types/task-worklet/ts3.1/index.d.ts @@ -0,0 +1,30 @@ +declare class TaskQueue { + constructor(options?: Options); + postTask(taskName: U['name'], ...args: Parameters): Task>; + addModule(moduleURL: string): Promise; +} + +interface Options { + size?: number; +} + +interface TaskDescriptor { + name: string; + (...args: any): any; +} + +export interface Task { + id: number; + state: State; + result: Promise; +} + +export type State = + | 'cancelled' + | 'completed' + | 'fulfilled' + | 'pending' + | 'scheduled'; + +export default TaskQueue; +export as namespace TaskQueue; diff --git a/types/task-worklet/ts3.1/task-worklet-tests.ts b/types/task-worklet/ts3.1/task-worklet-tests.ts new file mode 100644 index 0000000000..30a5072a2b --- /dev/null +++ b/types/task-worklet/ts3.1/task-worklet-tests.ts @@ -0,0 +1,23 @@ +import TaskQueue, { Task, State } from 'task-worklet'; + +interface Fetcher { + name: 'fetch'; + (input: RequestInfo, init?: RequestInit): Promise; +} + +const unsafe = new TaskQueue(); // $ExpectType TaskQueue +const withEmptyOptions = new TaskQueue({}); // $ExpectType TaskQueue +const withValidOptions = new TaskQueue({ size: 2 }); // $ExpectType TaskQueue + +const queue = new TaskQueue(); // $ExpectType TaskQueue +queue.addModule('/fetcher-worklet.js'); // $ExpectType Promise +const task = queue.postTask('fetch', 'https://example.com'); // $ExpectType Task> + +async () => { + const result = await task.result; // $ExpectType Response + const id = task.id; // $ExpectType number + const state = task.state; // $ExpectType State +}; + +new TaskQueue({ size: 1, excessProperty: true }); // $ExpectError +queue.postTask('incorrect-task-name'); // $ExpectError diff --git a/types/task-worklet/ts3.1/tsconfig.json b/types/task-worklet/ts3.1/tsconfig.json new file mode 100644 index 0000000000..e5076ca083 --- /dev/null +++ b/types/task-worklet/ts3.1/tsconfig.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "module": "commonjs", + "lib": [ + "es6", + "dom" + ], + "noImplicitAny": true, + "noImplicitThis": true, + "strictNullChecks": true, + "baseUrl": "../../", + "typeRoots": [ + "../../" + ], + "types": [], + "noEmit": true, + "forceConsistentCasingInFileNames": true, + "strictFunctionTypes": true + }, + "files": [ + "index.d.ts", + "task-worklet-tests.ts" + ] +} diff --git a/types/task-worklet/ts3.1/tslint.json b/types/task-worklet/ts3.1/tslint.json new file mode 100644 index 0000000000..3db14f85ea --- /dev/null +++ b/types/task-worklet/ts3.1/tslint.json @@ -0,0 +1 @@ +{ "extends": "dtslint/dt.json" }