Skip to content

Instantly share code, notes, and snippets.

@shqld
Created April 7, 2022 11:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save shqld/6b6f2e44e586fbbd8ce361ce7629c776 to your computer and use it in GitHub Desktop.
Save shqld/6b6f2e44e586fbbd8ce361ce7629c776 to your computer and use it in GitHub Desktop.
Nominal Number types in TypeScript
class Flavoring<FlavorT> {
private _flavor?: FlavorT;
}
type Flavor<Base, Flavor> = Base & Flavoring<Flavor>;
type i32 = Flavor<number, 'i32'>
type i64 = Flavor<number, 'i64'>;
const a: i32 = 1
const b: i64 = 2
let c = a
c = b // ERROR: Type 'i64' is not assignable to type 'i32'.