Add definitions for task-worklet

This commit is contained in:
Karol Majewski
2019-01-02 23:40:57 +01:00
parent f7f92b87af
commit dd1a1d163c
4 changed files with 84 additions and 0 deletions
+36
View File
@@ -0,0 +1,36 @@
// Type definitions for task-worklet 0.1
// Project: https://github.com/GoogleChromeLabs/task-worklet
// Definitions by: Karol Majewski <https://github.com/karol-majewski>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
// TypeScript Version: 3.0
declare class TaskQueue<T extends TaskDescriptor = any> {
constructor(options?: Options);
postTask<U extends T = any>(taskName: U['name'], ...args: Parameters<U>): Task<ReturnType<U>>;
addModule(moduleURL: string): Promise<void>;
}
interface Options {
size?: number;
}
interface TaskDescriptor {
name: string;
(...args: any): any;
}
export interface Task<T = unknown> {
id: number;
state: State;
result: Promise<T>;
}
export type State =
| 'cancelled'
| 'completed'
| 'fulfilled'
| 'pending'
| 'scheduled';
export default TaskQueue;
export as namespace TaskQueue;
+23
View File
@@ -0,0 +1,23 @@
import TaskQueue, { Task, State } from 'task-worklet';
interface Fetcher {
name: 'fetch';
(input: RequestInfo, init?: RequestInit): Promise<Response>;
}
const unsafe = new TaskQueue(); // $ExpectType TaskQueue<any>
const withEmptyOptions = new TaskQueue({}); // $ExpectType TaskQueue<any>
const withValidOptions = new TaskQueue({ size: 2 }); // $ExpectType TaskQueue<any>
const queue = new TaskQueue<Fetcher>(); // $ExpectType TaskQueue<Fetcher>
queue.addModule('/fetcher-worklet.js'); // $ExpectType Promise<void>
const task = queue.postTask<Fetcher>('fetch', 'https://example.com'); // $ExpectType Task<Promise<Response>>
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<Fetcher>('incorrect-task-name'); // $ExpectError
+24
View File
@@ -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"
]
}
+1
View File
@@ -0,0 +1 @@
{ "extends": "dtslint/dt.json" }