Sha256: 326da4aebf555d54b995854ff8f3432f63ba067be354fa16c6e1f50daa0667de

Contents?: true

Size: 1.58 KB

Versions: 25

Compression:

Stored size: 1.58 KB

Contents

import type {IsEqual} from './internal';

/**
Filter out keys from an object.

Returns `never` if `Exclude` is strictly equal to `Key`.
Returns `never` if `Key` extends `Exclude`.
Returns `Key` otherwise.

@example
```
type Filtered = Filter<'foo', 'foo'>;
//=> never
```

@example
```
type Filtered = Filter<'bar', string>;
//=> never
```

@example
```
type Filtered = Filter<'bar', 'foo'>;
//=> 'bar'
```

@see {Except}
*/
type Filter<KeyType, ExcludeType> = IsEqual<KeyType, ExcludeType> extends true ? never : (KeyType extends ExcludeType ? never : KeyType);

/**
Create a type from an object type without certain keys.

This type is a stricter version of [`Omit`](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-5.html#the-omit-helper-type). The `Omit` type does not restrict the omitted keys to be keys present on the given type, while `Except` does. The benefits of a stricter type are avoiding typos and allowing the compiler to pick up on rename refactors automatically.

This type was proposed to the TypeScript team, which declined it, saying they prefer that libraries implement stricter versions of the built-in types ([microsoft/TypeScript#30825](https://github.com/microsoft/TypeScript/issues/30825#issuecomment-523668235)).

@example
```
import type {Except} from 'type-fest';

type Foo = {
	a: number;
	b: string;
	c: boolean;
};

type FooWithoutA = Except<Foo, 'a' | 'c'>;
//=> {b: string};
```

@category Object
*/
export type Except<ObjectType, KeysType extends keyof ObjectType> = {
	[KeyType in keyof ObjectType as Filter<KeyType, KeysType>]: ObjectType[KeyType];
};

Version data entries

25 entries across 25 versions & 1 rubygems

Version Path
immosquare-cleaner-0.1.52 node_modules/type-fest/source/except.d.ts
immosquare-cleaner-0.1.51 node_modules/type-fest/source/except.d.ts
immosquare-cleaner-0.1.50 node_modules/type-fest/source/except.d.ts
immosquare-cleaner-0.1.49 node_modules/type-fest/source/except.d.ts
immosquare-cleaner-0.1.48 node_modules/type-fest/source/except.d.ts
immosquare-cleaner-0.1.47 node_modules/type-fest/source/except.d.ts
immosquare-cleaner-0.1.46 node_modules/type-fest/source/except.d.ts
immosquare-cleaner-0.1.45 node_modules/type-fest/source/except.d.ts
immosquare-cleaner-0.1.44 node_modules/type-fest/source/except.d.ts
immosquare-cleaner-0.1.43 node_modules/type-fest/source/except.d.ts
immosquare-cleaner-0.1.42 node_modules/type-fest/source/except.d.ts
immosquare-cleaner-0.1.41 node_modules/type-fest/source/except.d.ts
immosquare-cleaner-0.1.40 node_modules/type-fest/source/except.d.ts
immosquare-cleaner-0.1.39 node_modules/type-fest/source/except.d.ts
immosquare-cleaner-0.1.38 node_modules/type-fest/source/except.d.ts
immosquare-cleaner-0.1.32 node_modules/boxen/node_modules/type-fest/source/except.d.ts
immosquare-cleaner-0.1.31 node_modules/boxen/node_modules/type-fest/source/except.d.ts
immosquare-cleaner-0.1.30 node_modules/boxen/node_modules/type-fest/source/except.d.ts
immosquare-cleaner-0.1.29 node_modules/boxen/node_modules/type-fest/source/except.d.ts
immosquare-cleaner-0.1.28 node_modules/boxen/node_modules/type-fest/source/except.d.ts