Skip to content

Commit

Permalink
fixup! feat(of): Update of typings
Browse files Browse the repository at this point in the history
  • Loading branch information
benlesh committed Sep 3, 2019
1 parent e8adbb5 commit b8cb3a9
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 3 deletions.
4 changes: 2 additions & 2 deletions src/internal/observable/of.ts
@@ -1,4 +1,4 @@
import { SchedulerLike, ArrayValueOf } from '../types';
import { SchedulerLike, ValueFromArray } from '../types';
import { isScheduler } from '../util/isScheduler';
import { fromArray } from './fromArray';
import { Observable } from '../Observable';
Expand Down Expand Up @@ -36,7 +36,7 @@ export function of(): Observable<never>;
export function of<T>(): Observable<T>;
/** @deprecated remove in v8. Do not use generic arguments directly, allow inference or cast with `as` */
export function of<T>(value: T): Observable<T>;
export function of<A extends Array<any>>(...args: A): Observable<ArrayValueOf<A>>;
export function of<A extends Array<any>>(...args: A): Observable<ValueFromArray<A>>;
/* tslint:enable:max-line-length */

/**
Expand Down
18 changes: 17 additions & 1 deletion src/internal/types.ts
Expand Up @@ -98,8 +98,24 @@ export interface SchedulerAction<T> extends Subscription {
schedule(state?: T, delay?: number): Subscription;
}

/**
* Extracts the type from an `ObservableInput<any>`. If you have
* `O extends ObservableInput<any>` and you pass in `Observable<number>`, or
* `Promise<number>`, etc, it will type as `number`.
*/
export type ObservedValueOf<O> = O extends ObservableInput<infer T> ? T : never;

/**
* Extracts the generic type from an `ObservableInput<any>[]`.
* If you have `O extends ObservableInput<any>[]` and you pass in
* `Observable<string>[]` or `Promise<string>[]` you would get
* back a type of `string`
*/
export type ObservedValuesFromArray<X> = X extends Array<ObservableInput<infer T>> ? T : never;

export type ArrayValueOf<A> = A extends Array<infer T> ? T : never;
/**
* Extracts the generic value from an Array type.
* If you have `T extends Array<any>`, and pass a `string[]` to it,
* `ValueFromArray<T>` will return the actual type of `string`.
*/
export type ValueFromArray<A> = A extends Array<infer T> ? T : never;

0 comments on commit b8cb3a9

Please sign in to comment.