🚀 Launch Week Day 3:Introducing Supply Chain Attack Campaigns Tracking.Learn More →
Socket
Book a DemoInstallSign in
Socket

ts-opaque

Package Overview
Dependencies
Maintainers
1
Versions
19
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

ts-opaque

Easy-to-use library that implements opaque types in TypeScript!

latest
Source
npmnpm
Version
3.0.1
Version published
Maintainers
1
Created
Source

ts-opaque

Build Status Downloads

Easy-to-use library that implements opaque types in TypeScript!

Installation

Install ts-opaque through npm:

$ npm install ts-opaque

Motivation

An opaque type, in TypeScript, is a type whose true structure is obfuscated to the compiler at compile-time. These types can make your code more type safe, secure, easier to refactor, and faster!

While Flow has an opaque keyword for creating opaque types, TypeScript does not; this package is my solution.

Usage

import Opaque from "ts-opaque";

interface User {
  readonly id: Opaque<number, User>;
  name: string;
}

interface Post {
  readonly id: Opaque<number, Post>;
  readonly authorId: User["id"];
  title: string;
  body: string;
}

let myUser: User = {
  // Error, type 'number' is not assignable to type 'Opaque<number, User>'
  id: 1,
  name: "John Doe",
};

myUser = {
  id: 1 as User["id"],
  name: "John Doe",
};

let myPost: Post = {
  // Error, type 'number' is not assignable to type 'Opaque<number, Post>'
  id: 1,
  // Error, type 'number' is not assignable to type 'Opaque<number, User>'
  authorId: 1,
  title: "ts-opaque",
  body: "It's a pretty cool package.",
};

myPost = {
  id: 1 as Post["id"],
  authorId: myUser.id,
  title: "ts-opaque",
  body: "It's a pretty cool package.",
};

There are other types and helper function ts-opaque exports as well! Check out the API below.

API

  • Opaque - Create an opaque type.

Helper Types

  • BaseType - Get the base type of an opaque type.
  • BrandType - Get the brand type of an opaque type.

Helper Functions

  • create - Cast a value to an opaque type.
  • widen - Widen an opaque type to its base type.

Others have made fantastic packages to implement opaque types in TypeScript. While these implementations are flawless in their functionality, ts-opaque brands its opaque types with symbol keys, hiding them directly from your IDE's intellisense or its equivalent. ts-opaque is also distributed with helper functions and types to manipulate and use opaque types easily. Spread some love to these works:

License

This package is available as open source under the terms of the MIT License.

Keywords

brand

FAQs

Package last updated on 18 Apr 2021

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts