An open API service indexing awesome lists of open source software.

https://github.com/vedanshshetti/tstoolset

Collection of handy TypeScript types, ranging from primitives like numbers all the way to UUIDs and Email Addresses.
https://github.com/vedanshshetti/tstoolset

ts type-library types typesafety typescript typescript-library

Last synced: 6 months ago
JSON representation

Collection of handy TypeScript types, ranging from primitives like numbers all the way to UUIDs and Email Addresses.

Awesome Lists containing this project

README

          

# 🧰 **tstoolset**

**Open-source**, **Zero‑runtime** TypeScript **utility types** for cleaner, safer, more expressive code.

![npm version](https://img.shields.io/npm/v/@insanedev2478/tstoolset)
![license](https://img.shields.io/github/license/vedanshshetti/tstoolset)

---

## 🚀 Installation

```sh
npm install @insanelabs/tstoolset
```

---

## ✨ Features

- Strong, readable primitive aliases (`String`, `Number`, `Boolean`, etc.)
- Utility containers (`Obj`, `Arr`, `Func`)
- Template‑literal types (`UUIDV4`, `TrustableEmail`)
- Nominal typing with `Brand`
- Exact object enforcement with `Exact`
- Safe assertion helper: `convert(x)`
- Zero runtime cost — pure TypeScript
- Object schema merger with `Merge`
- snake_case to camelCase conversion with `CamelCase`

---

## 📦 Usage

### **Primitive & container helpers**

```ts
import type { String, Obj, Arr } from "@insanedev2478/tstoolset";

type User = Obj;
type Tags = Arr;
```

### **Exact object enforcement**

```ts
import type { Exact } from "@insanedev2478/tstoolset";

type User = { id: string };
const u: Exact = { id: "123" }; // ok
const x: Exact = { id: "123", a: 1 }; // ❌ extra key
```

### snake_case to camelCase 🔁

```ts
import type { CamelCase } from "@insanedev2478/tstoolset";
import { convertToCamelCase } from "@insanedev2478/tstoolset";

// Type-level examples:
type A = CamelCase<"snake_case">; // 'snakeCase'
type B = CamelCase<"multi_part_name">; // 'multiPartName'
type C = CamelCase<"alreadyCamel">; // 'alreadyCamel'

// Using a literal (type-level):
const s = "hello_world" as const;
type S = CamelCase; // 'helloWorld'

// Runtime helper `convertToCamelCase` preserves the typed relationship when used with literal types
const r = convertToCamelCase(s); // 'helloWorld' (type: CamelCase)

// It also handles dashes and spaces, and collapses multiple separators:
const r2 = convertToCamelCase("multi-part name" as const); // 'multiPartName'
const r3 = convertToCamelCase("alreadyCamel" as const); // 'alreadyCamel'
```

### **Nominal typing**

```ts
import type { Brand } from "@insanedev2478/tstoolset";

type UserId = Brand;

const id: UserId = "abc" as UserId;
```

### **Merge**

```ts
import type { Merge } from "@insanedev2478/tstoolset";
type A = { id: string; name: string };
type B = { id: number; admin: boolean };

const merged: Merge = {
id: 123, // overridden by B
name: "John",
admin: true,
};
```

### **UUID & Email template types**

```ts
import type { UUIDV4, TrustableEmail } from "@insanedev2478/tstoolset";

const id: UUIDV4 = "550e8400-e29b-41d4-a716-446655440000";
const email: TrustableEmail = "user@gmail.com";
```

### **Safe converter**

```ts
import { convert } from "@insanedev2478/tstoolset";

const fn = convert<(...args: any[]) => void>(() => {});
```

---

## 🗺️ Roadmap

- Deep utilities (`DeepPartial`, `DeepReadonly`, `DeepRequired`)
- JSON‑safe types (`JsonValue`, `JsonObject`)
- String manipulation types (`KebabCase`, `snake-case`)
- Schema‑style helpers
- More branded primitives

---

## 🤝 Contributing

I am still a 6th grader, so new releases will only be on weekends, but

issues, ideas, and PRs are welcome — this project is growing fast and feedback helps shape the toolkit.

---

## 📄 License

MIT