0.1.1 • Published 4 years ago

rustlike v0.1.1

Weekly downloads
-
License
ISC
Repository
-
Last release
4 years ago

TS RUST ENUM

This is a tool that lets you use rust-like enums and pattern matching.

Why

When I wrote a program using rust, I found that it provided a lot of functional programming such as closure, iterators, and the interesting enumerations. The writing of a rust program relies heavily on enumeration, and its enumeration implementation is different from most other programming languages. In short, an enum in rust can contain type information and values, which makes it easy to implement functional primitives such as Option and Result.

Correspondingly, as a functional programming language, JavaScript lacks the important feature of pattern matching. This made me think if I could use an enum type like rust in javascript (typescript) while using a static type checking tool like typescript to provide better compile-time security.

Usage

The point of consideration when writing this tool is to use typescript to guide and simplify the writing (by statically checking and type inferring) on the premise that it is as easy to write as possible, and to use the type system at compile time as much as possible to reduce runtime overhead.

So to write code with it may look like:

import { Enum } from "ts-rust-enum";

interface OptionEnumTemplate<T> {
  Some: T;
  None: null;
}

let some_number = Enum.new<OptionEnumTemplate<number>, "Some">("Some", 5);
let some_string = Enum.new<OptionEnumTemplate<string>, "Some">("Some", "a string");

let absent_number = Enum.new<OptionEnumTemplate<number>, "None">("None", null);

let matched = Enum.match<OptionEnumTempalte<number>, number>(some_number, {
  Some: (val) => val,
  None: () => 0
})

let unwrapped = some_number.unwrap();

有几点注意:

  1. "Some" 作为对compiler的注解,让compiler知道类型信息。
  2. match不能缺少分支