iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >如何使用TypeScript的TodoList
  • 934
分享到

如何使用TypeScript的TodoList

2023-07-04 22:07:29 934人浏览 薄情痞子
摘要

这篇文章主要介绍“如何使用typescript的TodoList”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“如何使用TypeScript的TodoList”文章能帮助大家解决问题。为什么用todo

这篇文章主要介绍“如何使用typescript的TodoList”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“如何使用TypeScript的TodoList”文章能帮助大家解决问题。

为什么用todolist

现代的框架教程目前再也不是写个hello world那么简单了,而是需要有一定基础能力能够做到数据绑定、遍历、条件判断等各种逻辑,而能完成这一系列内容的,todolist就是个很好的实现,比如React的教程、solijs教程都是以todolist为例

当然,你如果想看各种框架实现todolist的话,你可以访问Todomvc 这里面展示了各种框…

todolist的ts化

但是对于ts教程来说,只有官方的一些实例,并没有一个很好的项目上的教程,也就是有关实战的部分,很多同学在学习了ts之后,只会一些基础的js类型的设置,放在项目中就不清楚了,所以我们就出了这个教程

当然在开始之前,我们要了解这个教程不依赖任何的前端库,比如react,Vue等,同时也为了节省时间,我们仅仅是放出一些关键的ts代码,不需要将整个应用都展示出来,同样能够让你知道ts的使用

数据到视图

一个tudolist对应的数据是怎么样的?就拿刚才的视图来看的话,它应该是一个对象数组,数据应该是这样的

[  {    id: 1,    text: '待办事项1',    done: false  },  {    id: 2,    text: '待办事项2',    done: false  },  {    id: 3,    text: '待办事项3',    done: false  }]

其中id是每一个代办事项的唯一标识,text是事项名称,done表示是否完成

当我们点击完成的时候,实际上就是每一项的done发生了变化,数据发生变化之后驱动我们的视图做出对应的改变

实现handleTodoItem

对应的上述的点击事件,我们实现一下它的伪代码,当其点击的时候,需要处理对应的数据,先使用js实现

function handleTodoItem(todo){  // 点击的时候todo中的done的布尔值取反  return {    ...todo,    done: !todo.done  }}

然后我们使用ts进行优化

type Todo = {  id: number;  text: string;  done: boolean;}// 如果某个变量是todo类型,可以这样const todoItem: Todo = {  id: 1,  text: '待办事项1',  done: false}

这样ts类型就是正常的,如果相应的todoItem不匹配,则编译就会发生错误,可以让错误提前感知,并且如果项目中有配置的ts相关,vscode中就会给出对应的错误信息

对应到handleTodoItem这个方法中,应该怎么写呢?

function handleTodoItem(todo: Todo): Todo {  // 逻辑实现}

readonly

对于handleTodoItem这个函数来说,函数应该是无副作用的,所以传进去的todo对象,不应该发生变化,而是返回一个新的对象

比如这种方法,虽然能够实现同样的内容,但是它是有副作用的,改变了传入的参数,是不可取的

function handleTodoItem(todo: Todo):Todo {  // 点击的时候todo中的done的布尔值取反  todo.done = !todo.done  return todo}

但是这种的ts并不会报错,怎么办?那就需要借助我们的ts进行类型校验,你可以这样

type Todo = {  readonly id: number;  readonly text: string;  readonly done: boolean;}

当你尝试修改修改的话,就会发生ts错误,不允许修改,因为Todo类型是只读的,当然你也可以这样设置对象中所有的属性为只读

type Todo = Readonly<{  id: number;  text: string;  done: boolean;}>

在ts中,这种Readonly的关键词还有很多,比如Required,Partial等,如有需要,大家可自行搜索

分类

对于已经完成的list,我们需要将其进行分类筛选,比如我们要筛选出所有已经完成的项目,那么表现就是一个数组,并且done为true

[  {    id: 1,    text: '待办事项1',    done: true  },  {    id: 2,    text: '待办事项2',    done: true  }]

如何表示一个数组类内容呢?Todo[]这种方式就能表示上述数据,同样的,函数的参数是不允许修改的,避免副作用,所以可以这样

function completeTodoList(  todos: readonly Todo[]): Todo[] {  // ...}

当然,由于Todo的type中的done为boolean,但是在completeTodoList中done的值为true,所以我们需要重新定义一个类型

type CompletedTodo = Readonly<{  id: number;  text: string;  done: true;}>

所以上述的方法就会变成

function completeTodoList(  todos: readonly Todo[]): CompletedTodo[] {  // ...}

交叉类型

对于上面的Todo和CompletedTodo类型,其中这两个类型的id和text都是重复的,我们可以删除重复的逻辑,使用交叉类型

举个例子

type A = {a: number}type B = {b: string}type AandB = A & B// 结果为// {//   a: number//   b: string// }

当两个类型key相同时,第二个key会覆盖掉第一个的内容

type A = {key: number}type B = {key: string}type AandB = A & B// 结果为// {//   key: string// }

那针对Todo和CompletedTodo类型,我们想从Todo通过交叉类型得到CompletedTodo,该怎么做呢?

type CompletedTodo = Todo & {  readonly done: true}

是不是很简洁,并且去除了一些重复代码

新增功能

如果在Todo的基础上,我们新增了一个功能,对应的todo的优先级,使用priority这个字段表示

并且一共有三种优先级

!!!

!!

你可以priority: 2这样设置,展示为【!!】当然你也可以自定义,比如

{  priority: {    custom: '紧急'  }}

则展示为【紧急】,所以这时候数据变成了

[  {    id: 1,    text: '待办事项1',    done: false,    priority: 1  },  {    id: 2,    text: '待办事项2',    done: false,    priority: 2  },  {    id: 3,    text: '待办事项3',    done: false,    priority: {      custom: '紧急'    }  },  {    id: 4,    text: '待办事项4',    done: false  },]

我们已经有了Todo类型,如何新增一个key呢?

联合类型

上面我们之后交叉类型通过 & 连接,那联合类型则是通过 | 连接,同样的举个例子

type Foo = number | string;

这表示Foo类型可以是一个数字,也可以是一个string类型,所以我们的priority类型可以这样设置

type Priority = 1 | 2 | 3 | { custom: string };

这个时候priority就是我们想要的内容了,所以todo的类型可以变一下

type Todo = Readonly<{  id: number;  text: string;  done: boolean;  priority: Priority;}>

可选属性

上面的priority这个属性目前是必填的,但是这个属性我们可以不写,也就是todo可以没有优先级,针对这种情况,我们可以使用可选属性

type Todo = Readonly<{  id: number;  text: string;  done: boolean;  priority?: Priority;}>

在对应的地方添加一个?即可

数据转视图

那对应的priority的数据有了,如何把1,2,3这种的转成!!!的形式呢?

可以自定义一个函数,也就是priorityToString

priorityToString(1)// !priorityToString(2)// !!priorityToString(3)// !!!priorityToString({ custom: '紧急' })// 紧急

情况比较少,可能你会这样写

function priorityToString(priority: Priority): string {  if(priority === 1){    return '!'  }else if(priority === 2){    return '!!'  }else if(priority === 3){    return '!!!'  }else{    return priority.custom  }}

联合类型我们通过if条件进行判断的时候,它会自动确认每个if条件下的参数类型,这也是联合类型的强大之处。

关于“如何使用TypeScript的TodoList”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网精选频道,小编每天都会为大家更新不同的知识点。

--结束END--

本文标题: 如何使用TypeScript的TodoList

本文链接: https://www.lsjlt.com/news/347941.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何使用TypeScript的TodoList
    这篇文章主要介绍“如何使用TypeScript的TodoList”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“如何使用TypeScript的TodoList”文章能帮助大家解决问题。为什么用todo...
    99+
    2023-07-04
  • 项目中使用TypeScript的TodoList实例详解
    目录为什么用todolisttodolist的ts化数据到视图实现handleTodoItemreadonly分类交叉类型新增功能联合类型可选属性数据转视图总结为什么用todolis...
    99+
    2023-01-04
    TypeScript TodoList使用 TypeScript TodoList
  • Vue中TodoList如何使用
    本篇文章给大家分享的是有关Vue中TodoList如何使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1. methodsmethods类似...
    99+
    2024-04-02
  • vue.js中todolist如何使用
    vue.js中todolist如何使用,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。案例知识点:1.vue.js基础知识2.H...
    99+
    2024-04-02
  • 如何使用Vue实现todolist
    这篇文章主要介绍了如何使用Vue实现todolist,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、使用vue-cli脚手架快速搭建一个框...
    99+
    2024-04-02
  • 如何使用react实现todolist
    本教程操作环境:Windows10系统、react18.0.0版、Dell G3电脑。如何使用react实现todolist?React入门实战实例——ToDoList实现摘要: 最近学习了一小段时间的React,对一些React开发组件的...
    99+
    2023-05-14
    todolist React
  • typescript如何使用
    本篇内容主要讲解“typescript如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“typescript如何使用”吧! 基本类型 字符串,数字,布尔...
    99+
    2024-04-02
  • 如何使用TypeScript
    这篇文章主要讲解了“如何使用TypeScript”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用TypeScript”吧!一、什么是 TypeScriptTypeScript 是近几年...
    99+
    2023-06-03
  • 微信小程序TodoList如何使用
    这篇文章主要介绍“微信小程序TodoList如何使用”,在日常操作中,相信很多人在微信小程序TodoList如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”微信小程序TodoList如何使用”的疑惑有所...
    99+
    2023-06-26
  • Vite+React+TypeScript手撸TodoList的项目实践
    目录布局与样式创建工程定义全局数据类型实现步骤源码地址布局与样式 一个TodoList长什么样子相信无需多言: 上样式: src/TodoList.css .td-wrapper ...
    99+
    2024-04-02
  • TypeScript如何使用Record
    这篇文章将为大家详细讲解有关TypeScript如何使用Record,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。运用RecordRecord 是TypeScr...
    99+
    2024-04-02
  • TypeScript如何使用Omit
    这篇文章主要介绍了TypeScript如何使用Omit,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。巧用Omit有时候我们需要复用一个类型,...
    99+
    2024-04-02
  • 如何正确的使用TypeScript
    如何正确的使用TypeScript,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、TypeScript 是什么TypeScript 是一种由微软开发的自由和开源的编程语言...
    99+
    2023-06-17
  • 如何使用React实现一个完整的TodoList
    这篇文章主要介绍如何使用React实现一个完整的TodoList,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一. 首先根据效果图讲一下要实现的功能吧todoList最终效果图(1)...
    99+
    2024-04-02
  • TypeScript如何使用元组
    这篇文章主要为大家展示了“TypeScript如何使用元组”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“TypeScript如何使用元组”这篇文章吧。巧用元组有...
    99+
    2024-04-02
  • Vue3中如何使用TypeScript
    这篇文章主要介绍“Vue3中如何使用TypeScript”,在日常操作中,相信很多人在Vue3中如何使用TypeScript问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue3中如何使用TypeScript...
    99+
    2023-07-06
  • TypeScript如何使用注释
    这篇文章将为大家详细讲解有关TypeScript如何使用注释,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。注释的妙用我们可以通过  来注释TypeSc...
    99+
    2024-04-02
  • Laravel中如何使用Typescript
    本篇内容介绍了“Laravel中如何使用Typescript”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!为什么使用 TypeScriptT...
    99+
    2023-07-04
  • Vue3中TypeScript 如何使用
    今天就跟大家聊聊有关Vue3中TypeScript 如何使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。如何声明字段名为枚举的类型?根据设计,ty...
    99+
    2024-04-02
  • .NET6如何开发TodoList应用
    小编给大家分享一下.NET6如何开发TodoList应用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1.TodoList需求简介首先明确一下我们即将开发的这个T...
    99+
    2023-06-22
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作