Extract necessary functions from type-fest (#120)

This commit is contained in:
Richie Bendall 2020-07-20 11:48:08 +12:00 committed by GitHub
parent 4b35ad5bec
commit e31db97eab
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 52 additions and 28 deletions

View file

@ -2,7 +2,9 @@
/// <reference lib="dom"/> /// <reference lib="dom"/>
/// <reference types="node"/> /// <reference types="node"/>
export type Class<T = unknown> = new (...args: any[]) => T; import {Class, TypedArray, ObservableLike, Primitive} from './types';
export {Class, TypedArray, ObservableLike, Primitive};
const typedArrayTypeNames = [ const typedArrayTypeNames = [
'Int8Array', 'Int8Array',
@ -18,19 +20,6 @@ const typedArrayTypeNames = [
'BigUint64Array' 'BigUint64Array'
] as const; ] as const;
export type TypedArray =
| Int8Array
| Uint8Array
| Uint8ClampedArray
| Int16Array
| Uint16Array
| Int32Array
| Uint32Array
| Float32Array
| Float64Array
| BigInt64Array
| BigUint64Array;
type TypedArrayTypeName = typeof typedArrayTypeNames[number]; type TypedArrayTypeName = typeof typedArrayTypeNames[number];
function isTypedArrayName(name: unknown): name is TypedArrayTypeName { function isTypedArrayName(name: unknown): name is TypedArrayTypeName {
@ -80,15 +69,6 @@ const primitiveTypeNames = [
'symbol' 'symbol'
] as const; ] as const;
export type Primitive =
| null
| undefined
| string
| number
| bigint
| boolean
| symbol;
type PrimitiveTypeName = typeof primitiveTypeNames[number]; type PrimitiveTypeName = typeof primitiveTypeNames[number];
function isPrimitiveTypeName(name: unknown): name is PrimitiveTypeName { function isPrimitiveTypeName(name: unknown): name is PrimitiveTypeName {
@ -319,11 +299,6 @@ is.domElement = (value: unknown): value is HTMLElement => {
DOM_PROPERTIES_TO_CHECK.every(property => property in value); DOM_PROPERTIES_TO_CHECK.every(property => property in value);
}; };
export interface ObservableLike {
subscribe(observer: (value: unknown) => void): void;
[Symbol.observable](): ObservableLike;
}
is.observable = (value: unknown): value is ObservableLike => { is.observable = (value: unknown): value is ObservableLike => {
if (!value) { if (!value) {
return false; return false;

49
source/types.ts Normal file
View file

@ -0,0 +1,49 @@
// Extracted from https://github.com/sindresorhus/type-fest/blob/78019f42ea888b0cdceb41a4a78163868de57555/index.d.ts
/**
Matches any [primitive value](https://developer.mozilla.org/en-US/docs/Glossary/Primitive).
*/
export type Primitive =
| null
| undefined
| string
| number
| boolean
| symbol
| bigint;
// TODO: Remove the `= unknown` sometime in the future when most users are on TS 3.5 as it's now the default
/**
Matches a [`class` constructor](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes).
*/
export type Class<T = unknown, Arguments extends any[] = any[]> = new (...arguments_: Arguments) => T;
/**
Matches any [typed array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray), like `Uint8Array` or `Float64Array`.
*/
export type TypedArray =
| Int8Array
| Uint8Array
| Uint8ClampedArray
| Int16Array
| Uint16Array
| Int32Array
| Uint32Array
| Float32Array
| Float64Array
| BigInt64Array
| BigUint64Array;
declare global {
interface SymbolConstructor {
readonly observable: symbol;
}
}
/**
Matches a value that is like an [Observable](https://github.com/tc39/proposal-observable).
*/
export interface ObservableLike {
subscribe(observer: (value: unknown) => void): void;
[Symbol.observable](): ObservableLike;
}