rustlike v0.1.1
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();
有几点注意:
- "Some" 作为对compiler的注解,让compiler知道类型信息。
- match不能缺少分支