Comparing version 0.4.8 to 0.5.0
@@ -1,2 +0,2 @@ | ||
import { KeysExtendType } from './keys-extend-type'; | ||
export declare type FunctionKeys<T> = KeysExtendType<T, (...args: any) => any>; | ||
import { KeysByType } from './keys-by-type'; | ||
export declare type FunctionKeys<T> = KeysByType<T, (...args: any) => any>; |
@@ -5,14 +5,14 @@ export * from './equals'; | ||
export * from './keys-by-type'; | ||
export * from './keys-by-exact-type'; | ||
export * from './keys-exclude-by-type'; | ||
export * from './keys-exclude-extend-type'; | ||
export * from './keys-extend-type'; | ||
export * from './keys-exclude-by-exact-type'; | ||
export * from './last'; | ||
export * from './map-all-props'; | ||
export * from './map-props-by-key'; | ||
export * from './map-props-by-type'; | ||
export * from './map-props-by-exact-type'; | ||
export * from './map-nullable-props-to-optional-nullable'; | ||
export * from './map-nullable-props-to-optional'; | ||
export * from './map-props'; | ||
export * from './map-props-by-key-to-non-optional'; | ||
export * from './map-props-by-key'; | ||
export * from './map-props-by-type'; | ||
export * from './map-props-by-key-to-optional'; | ||
export * from './map-props-extend-type'; | ||
export * from './map-props-to-optional-by-key'; | ||
export * from './map-props-to-non-optional-by-key'; | ||
export * from './map-props-to-non-nullable'; | ||
@@ -24,11 +24,17 @@ export * from './mixin'; | ||
export * from './omit-props-by-type'; | ||
export * from './omit-props-extend-type'; | ||
export * from './omit-props-by-exact-type'; | ||
export * from './optional-keys'; | ||
export * from './pick-non-never'; | ||
export * from './replace'; | ||
export * from './replace-props-by-key'; | ||
export * from './replace-props-by-type'; | ||
export * from './replace-type'; | ||
export * from './return-type-of-constructor'; | ||
export * from './tail'; | ||
export * from './with-default'; | ||
export * from './non-callable'; | ||
export * from './return-type-of-constructor'; | ||
export * from './unpacked-array'; | ||
export * from './unpacked-array-like'; | ||
export * from './unpacked-iterable'; | ||
export * from './unpacked-async-iterable'; | ||
export * from './unpacked-promise-like'; | ||
export * from './unpacked-promise'; |
@@ -21,14 +21,14 @@ "use strict"; | ||
__exportStar(require("./keys-by-type"), exports); | ||
__exportStar(require("./keys-by-exact-type"), exports); | ||
__exportStar(require("./keys-exclude-by-type"), exports); | ||
__exportStar(require("./keys-exclude-extend-type"), exports); | ||
__exportStar(require("./keys-extend-type"), exports); | ||
__exportStar(require("./keys-exclude-by-exact-type"), exports); | ||
__exportStar(require("./last"), exports); | ||
__exportStar(require("./map-all-props"), exports); | ||
__exportStar(require("./map-props-by-key"), exports); | ||
__exportStar(require("./map-props-by-type"), exports); | ||
__exportStar(require("./map-props-by-exact-type"), exports); | ||
__exportStar(require("./map-nullable-props-to-optional-nullable"), exports); | ||
__exportStar(require("./map-nullable-props-to-optional"), exports); | ||
__exportStar(require("./map-props"), exports); | ||
__exportStar(require("./map-props-by-key-to-non-optional"), exports); | ||
__exportStar(require("./map-props-by-key"), exports); | ||
__exportStar(require("./map-props-by-type"), exports); | ||
__exportStar(require("./map-props-by-key-to-optional"), exports); | ||
__exportStar(require("./map-props-extend-type"), exports); | ||
__exportStar(require("./map-props-to-optional-by-key"), exports); | ||
__exportStar(require("./map-props-to-non-optional-by-key"), exports); | ||
__exportStar(require("./map-props-to-non-nullable"), exports); | ||
@@ -40,12 +40,18 @@ __exportStar(require("./mixin"), exports); | ||
__exportStar(require("./omit-props-by-type"), exports); | ||
__exportStar(require("./omit-props-extend-type"), exports); | ||
__exportStar(require("./omit-props-by-exact-type"), exports); | ||
__exportStar(require("./optional-keys"), exports); | ||
__exportStar(require("./pick-non-never"), exports); | ||
__exportStar(require("./replace"), exports); | ||
__exportStar(require("./replace-props-by-key"), exports); | ||
__exportStar(require("./replace-props-by-type"), exports); | ||
__exportStar(require("./replace-type"), exports); | ||
__exportStar(require("./return-type-of-constructor"), exports); | ||
__exportStar(require("./tail"), exports); | ||
__exportStar(require("./with-default"), exports); | ||
__exportStar(require("./non-callable"), exports); | ||
__exportStar(require("./return-type-of-constructor"), exports); | ||
__exportStar(require("./unpacked-array"), exports); | ||
__exportStar(require("./unpacked-array-like"), exports); | ||
__exportStar(require("./unpacked-iterable"), exports); | ||
__exportStar(require("./unpacked-async-iterable"), exports); | ||
__exportStar(require("./unpacked-promise-like"), exports); | ||
__exportStar(require("./unpacked-promise"), exports); | ||
//# sourceMappingURL=index.js.map |
@@ -1,4 +0,3 @@ | ||
import { Equals } from './equals'; | ||
export declare type KeysByType<T, Type> = { | ||
[Key in keyof T]: Equals<T[Key], Type> extends true ? Key : never; | ||
[Key in keyof T]: T[Key] extends Type ? Key : Type extends T[Key] ? Key : never; | ||
}[keyof T]; |
@@ -1,4 +0,4 @@ | ||
import { MapPropsExtendType } from './map-props-extend-type'; | ||
import { MapPropsByType } from './map-props-by-type'; | ||
import { NonNullableKeys } from './non-nullable-keys'; | ||
import { NullableKeys } from './nullable-keys'; | ||
export declare type MapNullablePropsToOptional<T> = Pick<T, NonNullableKeys<T>> & Partial<MapPropsExtendType<Pick<T, NullableKeys<T>>, null, undefined>>; | ||
export declare type MapNullablePropsToOptional<T> = Pick<T, NonNullableKeys<T>> & Partial<MapPropsByType<Pick<T, NullableKeys<T>>, null, undefined>>; |
@@ -1,4 +0,3 @@ | ||
import { Equals } from './equals'; | ||
export declare type MapPropsByType<T, OldType, NewType> = { | ||
[Key in keyof T]: Equals<T[Key], OldType> extends true ? NewType : T[Key]; | ||
[Key in keyof T]: T[Key] extends OldType ? Exclude<T[Key], OldType> | NewType : OldType extends T[Key] ? Exclude<T[Key], OldType> | NewType : T[Key]; | ||
}; |
@@ -1,2 +0,2 @@ | ||
import { KeysExcludeExtendType } from './keys-exclude-extend-type'; | ||
export declare type NonNullableKeys<T> = KeysExcludeExtendType<T, null | undefined>; | ||
import { KeysExcludeByType } from './keys-exclude-by-type'; | ||
export declare type NonNullableKeys<T> = KeysExcludeByType<T, null | undefined>; |
@@ -1,2 +0,2 @@ | ||
import { KeysExtendType } from './keys-extend-type'; | ||
export declare type NullableKeys<T> = KeysExtendType<T, undefined | null>; | ||
import { KeysByType } from './keys-by-type'; | ||
export declare type NullableKeys<T> = KeysByType<T, undefined | null>; |
@@ -1,2 +0,2 @@ | ||
import { KeysExtendType } from './keys-extend-type'; | ||
export declare type OptionalKeys<T> = Exclude<KeysExtendType<T, undefined>, undefined>; | ||
import { KeysByType } from './keys-by-type'; | ||
export declare type OptionalKeys<T> = Exclude<KeysByType<T, undefined>, undefined>; |
@@ -1,2 +0,2 @@ | ||
import { KeysExcludeByType } from './keys-exclude-by-type'; | ||
export declare type PickNonNever<T> = Pick<T, KeysExcludeByType<T, never>>; | ||
import { KeysExcludeByExactType } from './keys-exclude-by-exact-type'; | ||
export declare type PickNonNever<T> = Pick<T, KeysExcludeByExactType<T, never>>; |
@@ -1,4 +0,4 @@ | ||
import { ReplaceType } from './replace-type'; | ||
import { Replace } from './replace'; | ||
export declare type ReplacePropsByKey<T, Keys, OldType, NewType> = { | ||
[Key in keyof T]: Key extends Keys ? ReplaceType<T[Key], OldType, NewType> : T[Key]; | ||
[Key in keyof T]: Key extends Keys ? Replace<T[Key], OldType, NewType> : T[Key]; | ||
}; |
@@ -1,5 +0,5 @@ | ||
import { ReplaceType } from './replace-type'; | ||
import { KeysExtendType } from './keys-extend-type'; | ||
import { Replace } from './replace'; | ||
import { KeysByType } from './keys-by-type'; | ||
export declare type ReplacePropsByType<T, OldType, NewType> = { | ||
[Key in keyof T]: Key extends KeysExtendType<T, OldType> ? ReplaceType<T[Key], OldType, NewType> : T[Key]; | ||
[Key in keyof T]: Key extends KeysByType<T, OldType> ? Replace<T[Key], OldType, NewType> : T[Key]; | ||
}; |
@@ -1,1 +0,1 @@ | ||
export declare type ReturnTypeOfConstructor<T extends new (...args: any) => any> = T extends new (...args: any) => infer R ? R : any; | ||
export declare type ReturnTypeOfConstructor<T extends new (...args: any) => any> = T extends new (...args: any) => infer R ? R : never; |
{ | ||
"name": "hotypes", | ||
"version": "0.4.8", | ||
"version": "0.5.0", | ||
"description": "Higher order types for TypeScript", | ||
@@ -40,9 +40,9 @@ "keywords": [ | ||
"devDependencies": { | ||
"@blackglory/pass": "^1.0.1", | ||
"@commitlint/cli": "^17.0.3", | ||
"@commitlint/config-conventional": "^17.0.3", | ||
"@blackglory/pass": "^1.1.0", | ||
"@commitlint/cli": "^17.1.2", | ||
"@commitlint/config-conventional": "^17.1.0", | ||
"@types/jest": "^27.4.1", | ||
"@typescript-eslint/eslint-plugin": "^5.34.0", | ||
"@typescript-eslint/parser": "^5.34.0", | ||
"eslint": "^8.22.0", | ||
"@typescript-eslint/eslint-plugin": "^5.37.0", | ||
"@typescript-eslint/parser": "^5.37.0", | ||
"eslint": "^8.23.1", | ||
"husky": "^4.3.8", | ||
@@ -49,0 +49,0 @@ "jest": "^27.5.1", |
# hotypes | ||
Higher-order types for TypeScript in the real world. | ||
## Motivation | ||
`hotypes` contains these types: | ||
- A new type is a modified type from another type. | ||
- A new type is an operator or a function. | ||
- A new type is an internal type extractor. | ||
> [TypeScripts type system is Turing-complete.](https://github.com/microsoft/TypeScript/issues/14833) | ||
If you don't follow the real-world use cases to create higher-order types, | ||
you will create a lot of useless new macros. | ||
> Some people, when confronted with a type problem, think "I know, I'll use advanced types." Now they have two type problems. | ||
Higher-order types are difficult, | ||
so we should not further complicate or mystify them. | ||
## The difference with [justypes] | ||
hotypes are more like verbs or operators. | ||
[justypes]: https://www.npmjs.com/package/justypes | ||
## Install | ||
```sh | ||
@@ -31,36 +17,41 @@ npm install --save hotypes | ||
## API | ||
It is highly recommended to read test cases to make sure you understand what types exactly do. | ||
- Equals | ||
- Head | ||
- Last | ||
- Tail | ||
- FunctionKeys | ||
- Head | ||
- NonNullableKeys | ||
- NullableKeys | ||
- OptionalKeys | ||
- KeysByType | ||
- KeysByExactType | ||
- KeysExcludeByType | ||
- KeysExcludeExtendType | ||
- KeysExtendType | ||
- Last | ||
- KeysExcludeByExactType | ||
- MapAllProps | ||
- MapPropsByKey | ||
- MapPropsByType | ||
- MapPropsByExactType | ||
- MapNullablePropsToOptionalNullable | ||
- MapNullablePropsToOptional | ||
- MapProps | ||
- MapPropsByKeyToNonOptional | ||
- MapPropsByKeyToOptional | ||
- MapPropsByKey | ||
- MapPropsByType | ||
- MapPropsExtendType | ||
- MapPropsToNonOptionalByKey | ||
- MapPropsToOptionalByKey | ||
- MapPropsToNonNullable | ||
- Mixin | ||
- MixinAll | ||
- NonNullableKeys | ||
- NullableKeys | ||
- PickNonNever | ||
- OmitPropsByType | ||
- OmitPropsExtendType | ||
- OptionalKeys | ||
- PickNonNever | ||
- OmitPropsByExactType | ||
- Replace | ||
- ReplacePropsByKey | ||
- ReplacePropsByType | ||
- ReplaceType | ||
- ReturnTypeOfConstructor | ||
- Tail | ||
- WithDefault | ||
- NonCallable | ||
- ReturnTypeOfConstructor | ||
- UnpackedArray | ||
- UnpackedArrayLike | ||
- UnpackedIterable | ||
- UnpackedAsyncIterable | ||
- UnpackedPromise | ||
- UnpackedPromiseLike | ||
*The `Unpacked` prefix comes from [this official article](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-8.html#type-inference-in-conditional-types)* |
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
23719
120
251
57