Require Node.js 22

This commit is contained in:
Sindre Sorhus 2026-04-07 17:38:43 +07:00
parent eff8e6b318
commit faf700367e
6 changed files with 1069 additions and 1067 deletions

View file

@ -10,10 +10,11 @@ jobs:
fail-fast: false fail-fast: false
matrix: matrix:
node-version: node-version:
- 20 - 24
- 22
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v6
- uses: actions/setup-node@v4 - uses: actions/setup-node@v6
with: with:
node-version: ${{ matrix.node-version }} node-version: ${{ matrix.node-version }}
- run: npm install - run: npm install

View file

@ -17,11 +17,11 @@
}, },
"sideEffects": false, "sideEffects": false,
"engines": { "engines": {
"node": ">=18" "node": ">=22"
}, },
"scripts": { "scripts": {
"build": "del distribution && tsc", "build": "del distribution && tsc",
"test": "tsc --noEmit && xo && ava", "test": "tsc --noEmit && xo && node --experimental-transform-types --test test/test.ts",
"prepare": "npm run build" "prepare": "npm run build"
}, },
"files": [ "files": [
@ -51,31 +51,26 @@
"typeguards", "typeguards",
"types" "types"
], ],
"devDependencies": { "xo": {
"@sindresorhus/tsconfig": "^6.0.0", "rules": {
"@types/jsdom": "^21.1.7", "@typescript-eslint/no-unsafe-enum-comparison": "off",
"@types/node": "^20.14.10", "@typescript-eslint/no-confusing-void-expression": "off",
"@types/zen-observable": "^0.8.7", "@typescript-eslint/no-unsafe-type-assertion": "off",
"ava": "^6.1.3", "@stylistic/operator-linebreak": "off"
"del-cli": "^5.1.0", }
"expect-type": "^0.19.0",
"jsdom": "^24.1.0",
"rxjs": "^7.8.1",
"tempy": "^3.1.0",
"tsimp": "2.0.11",
"typescript": "5.5.3",
"xo": "^0.58.0",
"zen-observable": "^0.10.0"
}, },
"ava": { "devDependencies": {
"environmentVariables": { "@sindresorhus/tsconfig": "^8.1.0",
"TSIMP_DIAG": "error" "@types/jsdom": "^28.0.1",
}, "@types/node": "^25.5.2",
"extensions": { "@types/zen-observable": "^0.8.7",
"ts": "module" "del-cli": "^7.0.0",
}, "expect-type": "^1.3.0",
"nodeArguments": [ "jsdom": "^29.0.2",
"--import=tsimp/import" "rxjs": "^7.8.2",
] "tempy": "^3.2.0",
"typescript": "6.0.2",
"xo": "^2.0.2",
"zen-observable": "^0.10.0"
} }
} }

View file

@ -11,8 +11,8 @@ import type {
UrlString, UrlString,
WeakRef, WeakRef,
Whitespace, Whitespace,
} from './types.js'; } from './types.ts';
import {keysOf} from './utilities.js'; import {keysOf} from './utilities.ts';
// From type-fest. // From type-fest.
type ExtractFromGlobalConstructors<Name extends string> = type ExtractFromGlobalConstructors<Name extends string> =
@ -150,7 +150,7 @@ export type AssertionTypeDescription = typeof assertionTypeDescriptions[number];
const getObjectType = (value: unknown): ObjectTypeName | undefined => { const getObjectType = (value: unknown): ObjectTypeName | undefined => {
const objectTypeName = Object.prototype.toString.call(value).slice(8, -1); const objectTypeName = Object.prototype.toString.call(value).slice(8, -1);
if (/HTML\w+Element/.test(objectTypeName) && isHtmlElement(value)) { if (/HTML\w+Element/v.test(objectTypeName) && isHtmlElement(value)) {
return 'HTMLElement'; return 'HTMLElement';
} }
@ -166,6 +166,7 @@ function detect(value: unknown): TypeName {
return 'null'; return 'null';
} }
// eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check
switch (typeof value) { switch (typeof value) {
case 'undefined': { case 'undefined': {
return 'undefined'; return 'undefined';
@ -211,7 +212,7 @@ function detect(value: unknown): TypeName {
} }
const tagType = getObjectType(value); const tagType = getObjectType(value);
if (tagType && tagType !== 'Object') { if (tagType !== undefined && tagType !== 'Object') {
return tagType; return tagType;
} }
@ -219,7 +220,8 @@ function detect(value: unknown): TypeName {
return 'Promise'; return 'Promise';
} }
if (value instanceof String || value instanceof Boolean || value instanceof Number) { const objectTag = Object.prototype.toString.call(value).slice(8, -1);
if (objectTag === 'String' || objectTag === 'Boolean' || objectTag === 'Number') {
throw new TypeError('Please don\'t use object wrappers for primitive types'); throw new TypeError('Please don\'t use object wrappers for primitive types');
} }
@ -466,7 +468,7 @@ export function isBoolean(value: unknown): value is boolean {
return value === true || value === false; return value === true || value === false;
} }
// eslint-disable-next-line @typescript-eslint/ban-types // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
export function isBoundFunction(value: unknown): value is Function { export function isBoundFunction(value: unknown): value is Function {
return isFunction(value) && !Object.hasOwn(value, 'prototype'); return isFunction(value) && !Object.hasOwn(value, 'prototype');
} }
@ -475,12 +477,12 @@ export function isBoundFunction(value: unknown): value is Function {
Note: [Prefer using `Uint8Array` instead of `Buffer`.](https://sindresorhus.com/blog/goodbye-nodejs-buffer) Note: [Prefer using `Uint8Array` instead of `Buffer`.](https://sindresorhus.com/blog/goodbye-nodejs-buffer)
*/ */
export function isBuffer(value: unknown): value is NodeBuffer { export function isBuffer(value: unknown): value is NodeBuffer {
// eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access
return (value as any)?.constructor?.isBuffer?.(value) ?? false; return (value as any)?.constructor?.isBuffer?.(value) ?? false;
} }
export function isClass<T = unknown>(value: unknown): value is Class<T> { export function isClass<T = unknown>(value: unknown): value is Class<T> {
return isFunction(value) && /^class(\s+|{)/.test(value.toString()); return isFunction(value) && /^class(?:\s+|\{)/v.test(value.toString());
} }
export function isDataView(value: unknown): value is DataView { export function isDataView(value: unknown): value is DataView {
@ -556,7 +558,7 @@ export function isFormData(value: unknown): value is FormData {
return getObjectType(value) === 'FormData'; return getObjectType(value) === 'FormData';
} }
// eslint-disable-next-line @typescript-eslint/ban-types // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
export function isFunction(value: unknown): value is Function { export function isFunction(value: unknown): value is Function {
return typeof value === 'function'; return typeof value === 'function';
} }
@ -569,11 +571,9 @@ export function isGeneratorFunction(value: unknown): value is GeneratorFunction
return getObjectType(value) === 'GeneratorFunction'; return getObjectType(value) === 'GeneratorFunction';
} }
// eslint-disable-next-line @typescript-eslint/naming-convention const NODE_TYPE_ELEMENT = 1; // eslint-disable-line @typescript-eslint/naming-convention
const NODE_TYPE_ELEMENT = 1;
// eslint-disable-next-line @typescript-eslint/naming-convention const DOM_PROPERTIES_TO_CHECK: Array<(keyof HTMLElement)> = [ // eslint-disable-line @typescript-eslint/naming-convention
const DOM_PROPERTIES_TO_CHECK: Array<(keyof HTMLElement)> = [
'innerHTML', 'innerHTML',
'ownerDocument', 'ownerDocument',
'style', 'style',
@ -673,12 +673,12 @@ export function isNonEmptyStringAndNotWhitespace(value: unknown): value is NonEm
return isString(value) && !isEmptyStringOrWhitespace(value); return isString(value) && !isEmptyStringOrWhitespace(value);
} }
// eslint-disable-next-line @typescript-eslint/ban-types // eslint-disable-next-line @typescript-eslint/no-restricted-types
export function isNull(value: unknown): value is null { export function isNull(value: unknown): value is null {
return value === null; return value === null;
} }
// eslint-disable-next-line @typescript-eslint/ban-types // eslint-disable-next-line @typescript-eslint/no-restricted-types
export function isNullOrUndefined(value: unknown): value is null | undefined { export function isNullOrUndefined(value: unknown): value is null | undefined {
return isNull(value) || isUndefined(value); return isNull(value) || isUndefined(value);
} }
@ -691,7 +691,7 @@ export function isNumericString(value: unknown): value is `${number}` {
return isString(value) && !isEmptyStringOrWhitespace(value) && !Number.isNaN(Number(value)); return isString(value) && !isEmptyStringOrWhitespace(value) && !Number.isNaN(Number(value));
} }
// eslint-disable-next-line @typescript-eslint/ban-types // eslint-disable-next-line @typescript-eslint/no-restricted-types
export function isObject(value: unknown): value is object { export function isObject(value: unknown): value is object {
return !isNull(value) && (typeof value === 'object' || isFunction(value)); return !isNull(value) && (typeof value === 'object' || isFunction(value));
} }
@ -701,12 +701,12 @@ export function isObservable(value: unknown): value is ObservableLike {
return false; return false;
} }
// eslint-disable-next-line no-use-extend-native/no-use-extend-native, @typescript-eslint/no-unsafe-call // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access
if (Symbol.observable !== undefined && value === (value as any)[Symbol.observable]?.()) { if (Symbol.observable !== undefined && value === (value as any)[Symbol.observable]?.()) {
return true; return true;
} }
// eslint-disable-next-line @typescript-eslint/no-unsafe-call // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access
if (value === (value as any)['@@observable']?.()) { if (value === (value as any)['@@observable']?.()) {
return true; return true;
} }
@ -777,8 +777,8 @@ export function isTruthy<T>(value: T | Falsy): value is T {
return Boolean(value); return Boolean(value);
} }
// eslint-disable-next-line @typescript-eslint/ban-types // eslint-disable-next-line @typescript-eslint/no-restricted-types
type ResolveTypesOfTypeGuardsTuple<TypeGuardsOfT, ResultOfT extends unknown[] = [] > = type ResolveTypesOfTypeGuardsTuple<TypeGuardsOfT, ResultOfT extends unknown[] = []> =
TypeGuardsOfT extends [TypeGuard<infer U>, ...infer TOthers] TypeGuardsOfT extends [TypeGuard<infer U>, ...infer TOthers]
? ResolveTypesOfTypeGuardsTuple<TOthers, [...ResultOfT, U]> ? ResolveTypesOfTypeGuardsTuple<TOthers, [...ResultOfT, U]>
: TypeGuardsOfT extends undefined[] : TypeGuardsOfT extends undefined[]
@ -847,23 +847,23 @@ export function isValidLength(value: unknown): value is number {
return isSafeInteger(value) && value >= 0; return isSafeInteger(value) && value >= 0;
} }
// eslint-disable-next-line @typescript-eslint/ban-types // eslint-disable-next-line @typescript-eslint/no-restricted-types
export function isWeakMap<Key extends object = object, Value = unknown>(value: unknown): value is WeakMap<Key, Value> { export function isWeakMap<Key extends object = object, Value = unknown>(value: unknown): value is WeakMap<Key, Value> {
return getObjectType(value) === 'WeakMap'; return getObjectType(value) === 'WeakMap';
} }
// eslint-disable-next-line @typescript-eslint/ban-types, unicorn/prevent-abbreviations // eslint-disable-next-line @typescript-eslint/no-restricted-types
export function isWeakRef(value: unknown): value is WeakRef<object> { export function isWeakRef(value: unknown): value is WeakRef<object> {
return getObjectType(value) === 'WeakRef'; return getObjectType(value) === 'WeakRef';
} }
// eslint-disable-next-line @typescript-eslint/ban-types // eslint-disable-next-line @typescript-eslint/no-restricted-types
export function isWeakSet(value: unknown): value is WeakSet<object> { export function isWeakSet(value: unknown): value is WeakSet<object> {
return getObjectType(value) === 'WeakSet'; return getObjectType(value) === 'WeakSet';
} }
export function isWhitespaceString(value: unknown): value is Whitespace { export function isWhitespaceString(value: unknown): value is Whitespace {
return isString(value) && /^\s+$/.test(value); return isString(value) && /^\s+$/v.test(value);
} }
type ArrayMethod = (function_: (value: unknown, index: number, array: unknown[]) => boolean, thisArgument?: unknown) => boolean; type ArrayMethod = (function_: (value: unknown, index: number, array: unknown[]) => boolean, thisArgument?: unknown) => boolean;
@ -907,9 +907,9 @@ type Assert = {
positiveNumber: (value: unknown, message?: string) => asserts value is number; positiveNumber: (value: unknown, message?: string) => asserts value is number;
negativeNumber: (value: unknown, message?: string) => asserts value is number; negativeNumber: (value: unknown, message?: string) => asserts value is number;
bigint: (value: unknown, message?: string) => asserts value is bigint; bigint: (value: unknown, message?: string) => asserts value is bigint;
// eslint-disable-next-line @typescript-eslint/ban-types // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
function: (value: unknown, message?: string) => asserts value is Function; function: (value: unknown, message?: string) => asserts value is Function;
// eslint-disable-next-line @typescript-eslint/ban-types // eslint-disable-next-line @typescript-eslint/no-restricted-types
null: (value: unknown, message?: string) => asserts value is null; null: (value: unknown, message?: string) => asserts value is null;
class: <T = unknown>(value: unknown, message?: string) => asserts value is Class<T>; class: <T = unknown>(value: unknown, message?: string) => asserts value is Class<T>;
boolean: (value: unknown, message?: string) => asserts value is boolean; boolean: (value: unknown, message?: string) => asserts value is boolean;
@ -918,7 +918,7 @@ type Assert = {
array: <T = unknown>(value: unknown, assertion?: (element: unknown) => asserts element is T, message?: string) => asserts value is T[]; array: <T = unknown>(value: unknown, assertion?: (element: unknown) => asserts element is T, message?: string) => asserts value is T[];
buffer: (value: unknown, message?: string) => asserts value is NodeBuffer; buffer: (value: unknown, message?: string) => asserts value is NodeBuffer;
blob: (value: unknown, message?: string) => asserts value is Blob; blob: (value: unknown, message?: string) => asserts value is Blob;
// eslint-disable-next-line @typescript-eslint/ban-types // eslint-disable-next-line @typescript-eslint/no-restricted-types
nullOrUndefined: (value: unknown, message?: string) => asserts value is null | undefined; nullOrUndefined: (value: unknown, message?: string) => asserts value is null | undefined;
object: <Key extends keyof any = string, Value = unknown>(value: unknown, message?: string) => asserts value is Record<Key, Value>; object: <Key extends keyof any = string, Value = unknown>(value: unknown, message?: string) => asserts value is Record<Key, Value>;
iterable: <T = unknown>(value: unknown, message?: string) => asserts value is Iterable<T>; iterable: <T = unknown>(value: unknown, message?: string) => asserts value is Iterable<T>;
@ -929,20 +929,20 @@ type Assert = {
promise: <T = unknown>(value: unknown, message?: string) => asserts value is Promise<T>; promise: <T = unknown>(value: unknown, message?: string) => asserts value is Promise<T>;
generatorFunction: (value: unknown, message?: string) => asserts value is GeneratorFunction; generatorFunction: (value: unknown, message?: string) => asserts value is GeneratorFunction;
asyncGeneratorFunction: (value: unknown, message?: string) => asserts value is AsyncGeneratorFunction; asyncGeneratorFunction: (value: unknown, message?: string) => asserts value is AsyncGeneratorFunction;
// eslint-disable-next-line @typescript-eslint/ban-types // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
asyncFunction: (value: unknown, message?: string) => asserts value is Function; asyncFunction: (value: unknown, message?: string) => asserts value is Function;
// eslint-disable-next-line @typescript-eslint/ban-types // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
boundFunction: (value: unknown, message?: string) => asserts value is Function; boundFunction: (value: unknown, message?: string) => asserts value is Function;
regExp: (value: unknown, message?: string) => asserts value is RegExp; regExp: (value: unknown, message?: string) => asserts value is RegExp;
date: (value: unknown, message?: string) => asserts value is Date; date: (value: unknown, message?: string) => asserts value is Date;
error: (value: unknown, message?: string) => asserts value is Error; error: (value: unknown, message?: string) => asserts value is Error;
map: <Key = unknown, Value = unknown>(value: unknown, message?: string) => asserts value is Map<Key, Value>; map: <Key = unknown, Value = unknown>(value: unknown, message?: string) => asserts value is Map<Key, Value>;
set: <T = unknown>(value: unknown, message?: string) => asserts value is Set<T>; set: <T = unknown>(value: unknown, message?: string) => asserts value is Set<T>;
// eslint-disable-next-line @typescript-eslint/ban-types // eslint-disable-next-line @typescript-eslint/no-restricted-types
weakMap: <Key extends object = object, Value = unknown>(value: unknown, message?: string) => asserts value is WeakMap<Key, Value>; weakMap: <Key extends object = object, Value = unknown>(value: unknown, message?: string) => asserts value is WeakMap<Key, Value>;
// eslint-disable-next-line @typescript-eslint/ban-types // eslint-disable-next-line @typescript-eslint/no-restricted-types
weakSet: <T extends object = object>(value: unknown, message?: string) => asserts value is WeakSet<T>; weakSet: <T extends object = object>(value: unknown, message?: string) => asserts value is WeakSet<T>;
// eslint-disable-next-line @typescript-eslint/ban-types // eslint-disable-next-line @typescript-eslint/no-restricted-types
weakRef: <T extends object = object>(value: unknown, message?: string) => asserts value is WeakRef<T>; weakRef: <T extends object = object>(value: unknown, message?: string) => asserts value is WeakRef<T>;
int8Array: (value: unknown, message?: string) => asserts value is Int8Array; int8Array: (value: unknown, message?: string) => asserts value is Int8Array;
uint8Array: (value: unknown, message?: string) => asserts value is Uint8Array; uint8Array: (value: unknown, message?: string) => asserts value is Uint8Array;
@ -1261,7 +1261,7 @@ export function assertArrayLike<T = unknown>(value: unknown, message?: string):
} }
} }
// eslint-disable-next-line @typescript-eslint/ban-types // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
export function assertAsyncFunction(value: unknown, message?: string): asserts value is Function { export function assertAsyncFunction(value: unknown, message?: string): asserts value is Function {
if (!isAsyncFunction(value)) { if (!isAsyncFunction(value)) {
throw new TypeError(message ?? typeErrorMessage('AsyncFunction', value)); throw new TypeError(message ?? typeErrorMessage('AsyncFunction', value));
@ -1316,7 +1316,7 @@ export function assertBoolean(value: unknown, message?: string): asserts value i
} }
} }
// eslint-disable-next-line @typescript-eslint/ban-types // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
export function assertBoundFunction(value: unknown, message?: string): asserts value is Function { export function assertBoundFunction(value: unknown, message?: string): asserts value is Function {
if (!isBoundFunction(value)) { if (!isBoundFunction(value)) {
throw new TypeError(message ?? typeErrorMessage('Function', value)); throw new TypeError(message ?? typeErrorMessage('Function', value));
@ -1434,7 +1434,7 @@ export function assertFormData(value: unknown, message?: string): asserts value
} }
} }
// eslint-disable-next-line @typescript-eslint/ban-types // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
export function assertFunction(value: unknown, message?: string): asserts value is Function { export function assertFunction(value: unknown, message?: string): asserts value is Function {
if (!isFunction(value)) { if (!isFunction(value)) {
throw new TypeError(message ?? typeErrorMessage('Function', value)); throw new TypeError(message ?? typeErrorMessage('Function', value));
@ -1567,14 +1567,14 @@ export function assertNonEmptyStringAndNotWhitespace(value: unknown, message?: s
} }
} }
// eslint-disable-next-line @typescript-eslint/ban-types // eslint-disable-next-line @typescript-eslint/no-restricted-types
export function assertNull(value: unknown, message?: string): asserts value is null { export function assertNull(value: unknown, message?: string): asserts value is null {
if (!isNull(value)) { if (!isNull(value)) {
throw new TypeError(message ?? typeErrorMessage('null', value)); throw new TypeError(message ?? typeErrorMessage('null', value));
} }
} }
// eslint-disable-next-line @typescript-eslint/ban-types // eslint-disable-next-line @typescript-eslint/no-restricted-types
export function assertNullOrUndefined(value: unknown, message?: string): asserts value is null | undefined { export function assertNullOrUndefined(value: unknown, message?: string): asserts value is null | undefined {
if (!isNullOrUndefined(value)) { if (!isNullOrUndefined(value)) {
throw new TypeError(message ?? typeErrorMessage('null or undefined', value)); throw new TypeError(message ?? typeErrorMessage('null or undefined', value));
@ -1593,7 +1593,7 @@ export function assertNumericString(value: unknown, message?: string): asserts v
} }
} }
// eslint-disable-next-line @typescript-eslint/ban-types // eslint-disable-next-line @typescript-eslint/no-restricted-types
export function assertObject(value: unknown, message?: string): asserts value is object { export function assertObject(value: unknown, message?: string): asserts value is object {
if (!isObject(value)) { if (!isObject(value)) {
throw new TypeError(message ?? typeErrorMessage('Object', value)); throw new TypeError(message ?? typeErrorMessage('Object', value));
@ -1757,21 +1757,21 @@ export function assertValidLength(value: unknown, message?: string): asserts val
} }
} }
// eslint-disable-next-line @typescript-eslint/ban-types // eslint-disable-next-line @typescript-eslint/no-restricted-types
export function assertWeakMap<Key extends object = object, Value = unknown>(value: unknown, message?: string): asserts value is WeakMap<Key, Value> { export function assertWeakMap<Key extends object = object, Value = unknown>(value: unknown, message?: string): asserts value is WeakMap<Key, Value> {
if (!isWeakMap(value)) { if (!isWeakMap(value)) {
throw new TypeError(message ?? typeErrorMessage('WeakMap', value)); throw new TypeError(message ?? typeErrorMessage('WeakMap', value));
} }
} }
// eslint-disable-next-line @typescript-eslint/ban-types, unicorn/prevent-abbreviations // eslint-disable-next-line @typescript-eslint/no-restricted-types
export function assertWeakRef<T extends object = object>(value: unknown, message?: string): asserts value is WeakRef<T> { export function assertWeakRef<T extends object = object>(value: unknown, message?: string): asserts value is WeakRef<T> {
if (!isWeakRef(value)) { if (!isWeakRef(value)) {
throw new TypeError(message ?? typeErrorMessage('WeakRef', value)); throw new TypeError(message ?? typeErrorMessage('WeakRef', value));
} }
} }
// eslint-disable-next-line @typescript-eslint/ban-types // eslint-disable-next-line @typescript-eslint/no-restricted-types
export function assertWeakSet<T extends object = object>(value: unknown, message?: string): asserts value is WeakSet<T> { export function assertWeakSet<T extends object = object>(value: unknown, message?: string): asserts value is WeakSet<T> {
if (!isWeakSet(value)) { if (!isWeakSet(value)) {
throw new TypeError(message ?? typeErrorMessage('WeakSet', value)); throw new TypeError(message ?? typeErrorMessage('WeakSet', value));
@ -1795,4 +1795,4 @@ export type {
Primitive, Primitive,
TypedArray, TypedArray,
UrlString, UrlString,
} from './types.js'; } from './types.ts';

View file

@ -4,7 +4,8 @@
Matches any [primitive value](https://developer.mozilla.org/en-US/docs/Glossary/Primitive). Matches any [primitive value](https://developer.mozilla.org/en-US/docs/Glossary/Primitive).
*/ */
export type Primitive = export type Primitive =
| null // eslint-disable-line @typescript-eslint/ban-types // eslint-disable-next-line @typescript-eslint/no-restricted-types
| null
| undefined | undefined
| string | string
| number | number
@ -53,10 +54,11 @@ export type ObservableLike = {
[Symbol.observable](): ObservableLike; [Symbol.observable](): ObservableLike;
}; };
// eslint-disable-next-line @typescript-eslint/ban-types // eslint-disable-next-line @typescript-eslint/no-restricted-types
export type Falsy = false | 0 | 0n | '' | null | undefined; export type Falsy = false | 0 | 0n | '' | null | undefined;
export type WeakRef<T extends object> = { // eslint-disable-line @typescript-eslint/ban-types, unicorn/prevent-abbreviations // eslint-disable-next-line @typescript-eslint/no-restricted-types
export type WeakRef<T extends object> = {
readonly [Symbol.toStringTag]: 'WeakRef'; readonly [Symbol.toStringTag]: 'WeakRef';
deref(): T | undefined; deref(): T | undefined;
}; };

File diff suppressed because it is too large Load diff

View file

@ -1,5 +1,11 @@
{ {
"extends": "@sindresorhus/tsconfig", "extends": "@sindresorhus/tsconfig",
"compilerOptions": {
"types": ["node"],
"rootDir": "source",
"allowImportingTsExtensions": true,
"rewriteRelativeImportExtensions": true
},
"include": [ "include": [
"source" "source"
], ],