TypeScript 用腻了?来换换口味吧——使用 ReScript + React 写一个简单的Todo List

本文介绍了如何使用ReScript替代TypeScript,结合React构建一个Todo List应用。文章强调了ReScript的柯里化、pipe功能、类型推导以及模式匹配等优势,并通过新建项目、定义数据类型、添加组件的步骤展示了ReScript的简洁性。
摘要由CSDN通过智能技术生成

前言

前端技术如今蓬勃发展,时时刻刻都有新的技术栈诞生,这使得各位前端们常常大呼学不动了。既然如此笔者为何还要去学一门和 TypeScript 类似的新语言呢,难道 TypeScript 不够用嘛。

TypeScript 生态现在已经足够强大了,那么学习一个新的 ReScript 又有什么优势呢?ReScript 是对函数式友好的编程语言,函数默认自带柯里化,原生支持 pipe 功能,友好的类型推导,以及没有 null 和 undefined 的概念来消除了因其而产生的 Bug 。还有一点就是官方的 compiler 是不依赖于 node 的原生二进制程序,所以编译速度是 TypeScript 所不能及的,虽然目前已经有诸如 esbuild 之类的 TypeScript 编译器,速度是够快,但不支持类型判断。

项目地址 在线 demo

下面笔者就从头开始写一个 Todo List 来简单的认识一下 ReScript

新建 Reducer.res
  • 定义数据类型
type action =
  | AddTodo(string)
  | RemoveTodo(int)
  | ToggleTodo(int)
// reducer action 直接用 ReScript 自带的 Variant 结构来定义,可以利用其强大的模式匹配能力减少样板代码
type todo = {
  id: int,
  completed: bool,
  text: string,
}
type state = {
  todos: array<todo>,
  nextId: int,
} 
  • 添加 reducer 函数
let reducer = ({todos, nextId}, action) => {
  switch action {
  | AddTodo(text) => {
      todos: todos->Belt.Array.concat([
        {
          id: nextId,
          text: text,
          completed: false,
        },
      ]),
      nextId: nextId + 1,
    }
  | RemoveTodo(id) => {todos: todos->Belt.Array.keep(todo => todo.id != id), nextId: nextId}
  | ToggleTodo(id) => {
      todos: todos->Belt.Array.map(todo => {
        ...todo,
        completed: todo.id == id ? !todo.completed : todo.completed,
      }),
      nextId: nextId,
    }
  }
} 

不用手动指定 reducer 参数的类型,编译器会根据上下位自动推断出 {todos, nextId}: state, action: action

因为有强大的匹配模式能力,代码结构清晰来许都,也不用写得像 TypeScript 那么啰唆;

TypeScript 版本:

type Action = {
  type: "ADD_TODO" | "
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值