Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/igorskyflyer/npm-common-types
๐ฆ Provides frequently used types for your TypeScript projects. ๐ฆ
https://github.com/igorskyflyer/npm-common-types
back-end common generic igorskyflyer interface javascript js node promise shared trim ts types typescript
Last synced: 10 days ago
JSON representation
๐ฆ Provides frequently used types for your TypeScript projects. ๐ฆ
- Host: GitHub
- URL: https://github.com/igorskyflyer/npm-common-types
- Owner: igorskyflyer
- License: mit
- Created: 2024-07-20T00:12:31.000Z (4 months ago)
- Default Branch: main
- Last Pushed: 2024-07-24T14:58:26.000Z (4 months ago)
- Last Synced: 2024-10-28T15:26:29.351Z (18 days ago)
- Topics: back-end, common, generic, igorskyflyer, interface, javascript, js, node, promise, shared, trim, ts, types, typescript
- Language: TypeScript
- Homepage: https://www.npmjs.com/package/@igor.dvlpr/common-types
- Size: 89.8 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
CommonTypes
๐ฆ Provides frequently used types for your TypeScript projects. ๐ซ
๐ Support further development
I work hard for every project, including this one and your support means a lot to me!
Consider buying me a coffee. โ
Thank you for supporting my efforts! ๐๐
@igorskyflyer
## ๐ Table of contents
- [Usage](#-usage)
- [API](#-api)
- [KeysOf\](#keysoftype)
- [TypeOfValues\](#typeofvaluestype)
- [MethodsOf\](#methodsoftype)
- [PropertiesOf\](#propertiesoftype)
- [DeepPartial\](#deeppartialtype)
- [Promisable\](#promisabletype)
- [EnumKeys\](#enumkeystype-keytype)
- [Func](#funcargs-fnreturn)
- [Callback](#callbackargs-fnreturn)
- [TrimLeft\](#trimleftinput)
- [TrimRight\](#trimrightinput)
- [Trim\](#triminput)
- [IsGeneric\](#isgenerictype)
- [MethodSignature\](#methodsignaturetype-method)
- [Override\](#overridetype-changes)
- [HasOverlap\](#hasoverlapfirsttype-secondtype)
- [Extend\](#extendtype-changes)
- [MethodName\](#methodnametype-method)
- [Examples](#-examples)
- [Changelog](#-changelog)
- [License](#-license)
- [Related](#-related)
- [Author](#-author)---
## ๐ต๐ผ Usage
Install it by executing:
```shell
npm i -D "@igor.dvlpr/common-types"
```
## ๐คน๐ผ API
### `KeysOf`
Extracts all keys from the type `Type`.
> [!TIP]
> **CAN** be used with generics as well.
>
`example.ts`
```ts
type ArrayKeys = KeysOf> // 'at' | 'concat' | 'copyWithin', etc.
```---
### `TypeOfValues`
Extracts all value types of the type `Type`. Works with top-level properties only.
`IPerson.ts`
```ts
interface IPerson {
firstName: string
lastName: string
zip: number
isMember: boolean
}
```
`example.ts`
```ts
type ValueTypes = TypeOfValues // string | number | boolean
```---
### `MethodsOf`
Extracts all methods from the type `Type`.
> [!CAUTION]
> Can **NOT** be used with generics.
>
`example.ts`
```ts
type NumberMethods = MethodsOf // 'toString' | 'toFixed' | 'toExponential' | 'toPrecision' | 'valueOf' | 'toLocaleString'
```---
### `PropertiesOf`
Extracts all properties from the type `Type`.
> [!CAUTION]
> Can **NOT** be used with generics.
>
`example.ts`
```ts
type StringProperties = PropertiesOf // 'length'
```---
### `DeepPartial`
Constructs a type with all top-level and nested properties of the type `Type` set to optional.
> [!TIP]
> See also TypeScript's built-in utility type [`Partial`](https://www.typescriptlang.org/docs/handbook/utility-types.html#partialtype) ![An external link](https://raw.githubusercontent.com/igorskyflyer/igorskyflyer/main/assets/external.svg).
>
`IPerson.ts`
```ts
interface IPerson {
name: string
address: {
city: string
zip: number
}
}
```
`example.ts`
```ts
type PersonOptional = DeepPartial/**
* PersonOptional:
* {
* name?: string
* address?: {
* city?: string
* zip?: number
* }
* }
*/
```---
### `Promisable`
Provides a convenient way to allow flexibility in handling values that could either be immediate or asynchronously resolved.
`example.ts`
```ts
const immediateValue: number = 42
const promiseValue: Promisable = Promise.resolve(42)async function handleValue(value: Promisable) {
const result = await processValue(value)
console.log(result) // Will log the number 42, whether value was a direct number or a Promise resolving to 42
}handleValue(immediateValue)
handleValue(promiseValue)
```---
### `EnumKeys`
Extracts all keys from the `Type` that are of the type `KeyType`.
`IConfig`
```ts
interface IConfig {
apiUrl: string
timeout: number
isEnabled: boolean
retryAttempts: number
}
```
`example.ts`
```ts
type ConfigNumbers = EnumKeys // 'timeout' | 'retryAttempts'
```---
### `Func`
Constructs a generic `Function`-*like* type with the arguments of type `Args` and the return value of type `FnReturn`.
`example.ts`
```ts
function process(items: number[], callback: Func): boolean {
// shortened for brevity
// do NOT access your Array immediately :)
for (let i = 0; i < items.length; i++) {
if (callback(items[i])) {
return true
}
}return false
}process([1, 1, 8, 1], (item) => {
if (item % 2 === 0) {
return true
}return false
}) // returns true
```---
### `Callback`
Alias of [`Func`](#funcargs-fnreturn).
---
### `TrimLeft`
Recursively removes all leading whitespace from the `String` type `Input`.
`example.ts`
```ts
type Id = ' ID'
type ProperId = TrimLeftconst id: ProperId = ' ID' // ERROR: does NOT accept leading whitespace
```
---### `TrimRight`
Recursively removes all trailing whitespace from the `String` type `Input`.
`example.ts`
```ts
type Id = 'ID '
type ProperId = TrimRightconst id: ProperId = 'ID ' // ERROR: does NOT accept leading whitespace
```
---### `Trim`
Recursively removes all leading and trailing whitespace from the `String` type `Input`.
`example.ts`
```ts
type Id = ' ID '
type ProperId = Trimconst id: ProperId = ' ID ' // ERROR: does NOT accept leading nor trailing whitespace
```
> [!TIP]
> A very cool usage of the [`Trim`](#triminput) type is implemented in the [`magic-querySelector`](https://github.com/igorskyflyer/npm-magic-queryselector) project.
>---
### `IsGeneric`
Returns a Boolean whether the type `Type` is a generic.
`example.ts`
```ts
type ArrayIsGeneric = IsGeneric> // true
type NumberIsGeneric = IsGeneric // false
```
---### `MethodSignature`
Gets the method signature `Method` of the type `Type`.
`example.ts`
```ts
type NumberToFixedMethod = MethodSignature // expects (fractionDigits?: number) => string
```---
### `Override`
Overrides the type `Type` with the new type of `Changes`.
`IPerson`
```ts
interface IPerson {
name: string
children: boolean
}
```
`example.ts`
```ts
const person: IPerson = {
name:'John Doe',
children: true
}type NewPerson = Override //only accepts existing keys
const newPerson: NewPerson = {
name:'John Doe',
children: 2
}
```---
### `HasOverlap`
Checks whether the types `FirstType` and `SecondType` overlap, i.e. have the same keys.
> [!WARNING]
> It only checks the key names, **NOT** their **TYPES**!
>
`IPerson`
```ts
interface IPerson {
name: string
children: boolean
}
```
`example.ts`
```ts
type PersonOverlap = HasOverlap<
IPerson,
{
name: string
children: boolean
}
> // returns true
```
---### `Extend`
Extends the type `Type` with the new type of `Changes` with only non-existent keys in type `Type`.
`IPerson`
```ts
interface IPerson {
name: string
children: number
}
```
`example.ts`
```ts
type NewPerson = Extend //only accepts non-existing keys
// will return `never` here
const newPerson: NewPerson = {
name: 'John Doe',
children: 2
} // will errortype NewestPerson = Extend //only accepts non-existing keys
const newestPerson: NewestPerson = {
name: 'John Doe',
children: 2,
profession: 'Developer'
} // will NOT error
```---
### `MethodName`
Checks for the existence of the method `Method` in the type of `Type` and returns it if found.
`example.ts`
```ts
type NumberToFixedMethod = MethodName // toFixed
```---
## โจ Examples
`utils.ts`
```ts
import type { Callback } from '@igor.dvlpr/common-types'function process(
items: number[],
callback: Callback
): boolean {
// shortened for brevity
// do NOT access your Array immediately :)
for (let i = 0; i < items.length; i++) {
if (callback(items[i])) {
return true
}
}return false
}const result = process([1, 1, 8, 1], (item) => {
if (item % 2 === 0) {
return true
}return false
}) // returns trueconsole.log(result)
```
---
## ๐ Changelog
๐ Changelog is available here: [CHANGELOG.md](https://github.com/igorskyflyer/npm-common-types/blob/main/CHANGELOG.md).
---
## ๐ชช License
Licensed under the MIT license which is available here, [MIT license](https://github.com/igorskyflyer/npm-common-types/blob/main/LICENSE).
---
## ๐งฌ Related
[@igor.dvlpr/windev](https://www.npmjs.com/package/@igor.dvlpr/windev)
> _๐ Provides ways of checking whether a path is a legacy Windows device. ๐พ_
[@igor.dvlpr/magic-queryselector](https://www.npmjs.com/package/@igor.dvlpr/magic-queryselector)
> _๐ช A TypeScript-types patch for querySelector/querySelectorAll, make them return types you expect them to! ๐ฎ_
[@igor.dvlpr/jmap](https://www.npmjs.com/package/@igor.dvlpr/jmap)
> _๐ถ๏ธ Reads a JSON file into a Map. ๐ป_
[@igor.dvlpr/node-clone-js](https://www.npmjs.com/package/@igor.dvlpr/node-clone-js)
> _๐งฌ A lightweight JavaScript utility allowing deep copy-by-value of nested objects, arrays and arrays of objects. ๐ช_
[@igor.dvlpr/extendable-string](https://www.npmjs.com/package/@igor.dvlpr/extendable-string)
> _๐ฆ ExtendableString allows you to create strings on steroids that have custom transformations applied to them, unlike common, plain strings.. ๐ช_
---
### ๐จ๐ปโ๐ป Author
Created by **Igor Dimitrijeviฤ** ([*@igorskyflyer*](https://github.com/igorskyflyer/)).