🤖 Merge PR #65657 Added observ types by @beno-coviu

* Added observ types

* Fixed various eslint and prettier issues
This commit is contained in:
beno-coviu
2023-06-02 11:02:08 +10:00
committed by GitHub
parent 5c28602b0d
commit e221cd243b
7 changed files with 143 additions and 0 deletions

64
types/observ/computed.d.ts vendored Normal file
View File

@@ -0,0 +1,64 @@
import { ObservableValue } from './';
type ValueOfObservable<T> = T extends ObservableValue<infer U> ? U : never;
declare function computed<O1 extends ObservableValue<any>, R>(
// eslint-disable-next-line no-single-element-tuple-type
observables: [O1],
compute: (observable1: ValueOfObservable<O1>) => R,
): ObservableValue<R>;
declare function computed<O1 extends ObservableValue<any>, O2 extends ObservableValue<any>, R>(
observables: [O1, O2],
compute: (observable1: ValueOfObservable<O1>, observable2: ValueOfObservable<O2>) => R,
): ObservableValue<R>;
declare function computed<
O1 extends ObservableValue<any>,
O2 extends ObservableValue<any>,
O3 extends ObservableValue<any>,
R,
>(
observables: [O1, O2, O3],
compute: (
observable1: ValueOfObservable<O1>,
observable2: ValueOfObservable<O2>,
observable3: ValueOfObservable<O3>,
) => R,
): ObservableValue<R>;
declare function computed<
O1 extends ObservableValue<any>,
O2 extends ObservableValue<any>,
O3 extends ObservableValue<any>,
O4 extends ObservableValue<any>,
R,
>(
observables: [O1, O2, O3, O4],
compute: (
observable1: ValueOfObservable<O1>,
observable2: ValueOfObservable<O2>,
observable3: ValueOfObservable<O3>,
observable4: ValueOfObservable<O4>,
) => R,
): ObservableValue<R>;
declare function computed<
O1 extends ObservableValue<any>,
O2 extends ObservableValue<any>,
O3 extends ObservableValue<any>,
O4 extends ObservableValue<any>,
O5 extends ObservableValue<any>,
R,
>(
observables: [O1, O2, O3, O4, O5],
compute: (
observable1: ValueOfObservable<O1>,
observable2: ValueOfObservable<O2>,
observable3: ValueOfObservable<O3>,
observable4: ValueOfObservable<O4>,
observable5: ValueOfObservable<O5>,
) => R,
): ObservableValue<R>;
export = computed;

19
types/observ/index.d.ts vendored Normal file
View File

@@ -0,0 +1,19 @@
// Type definitions for observ 0.2
// Project: https://github.com/Raynos/observ
// Definitions by: Ben O'Sullivan <https://github.com/beno-coviu>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
declare namespace Observable {
type RemoveListener = () => void;
interface ObservableValue<T> {
(): T;
(listener: (value: T) => void): RemoveListener;
set: (value: T) => void;
}
}
declare function Observable<T>(value: T): Observable.ObservableValue<T>;
export = Observable;

View File

@@ -0,0 +1,22 @@
import Observable = require('observ');
import computed = require('observ/computed');
import watch = require('observ/watch');
import GeneratorSource = require('observ/source');
const o1 = Observable('hello');
const o2 = Observable('world');
const o3 = Observable(false);
const test = computed([o1, o2, o3], (o1, o2, o3) => `${o1} ${o2}`);
const removeListener = test(value => {
// do something
});
watch(test, value => {
// do something
});
o1.set('hello,');
removeListener();
const o4 = GeneratorSource(value => value, 'hi');

5
types/observ/source.d.ts vendored Normal file
View File

@@ -0,0 +1,5 @@
import { ObservableValue } from './';
declare function GeneratorSource<T>(generator: (setter: (value: T) => void) => void, initial: T): ObservableValue<T>;
export = GeneratorSource;

View File

@@ -0,0 +1,23 @@
{
"compilerOptions": {
"module": "commonjs",
"lib": [
"es6"
],
"noImplicitAny": true,
"noImplicitThis": true,
"strictFunctionTypes": true,
"strictNullChecks": true,
"baseUrl": "../",
"typeRoots": [
"../"
],
"types": [],
"noEmit": true,
"forceConsistentCasingInFileNames": true
},
"files": [
"index.d.ts",
"observ-tests.ts"
]
}

1
types/observ/tslint.json Normal file
View File

@@ -0,0 +1 @@
{ "extends": "@definitelytyped/dtslint/dt.json" }

9
types/observ/watch.d.ts vendored Normal file
View File

@@ -0,0 +1,9 @@
import { ObservableValue } from './';
type RemoveListener = () => void;
declare function watch<O extends ObservableValue<any>>(
observable: O,
listener: (value: O extends ObservableValue<infer V> ? V : never) => void,
): RemoveListener;
export = watch;