极链科技前端工程师茅丹丹

前言

· TS是什么

Type = Type + (标准JS)。

TS的官方网站:Type is a typed superset of Java that compiles to plain Java。Type是一个编译到纯JS的有类型定义的JS超集。

· TS优点

· TS 最大的优势是它提供了强大的静态分析能力,结合 TSLint 能对代码做到更加严格的检查约束。传统的 Ecma 由于没有静态类型,即使有了 ESLint 也只能做到很基本的检查,一些 typo 问题可能线上出了 Bug 后才被发现。

· TS 让代码更加健壮,尤其是对于大型项目,编译通过几乎就代表运行正常,也给重构增加了很多信心。

· TS 类型声明让提高代码的可读性、结构清晰

· IDE的提示更加智能

目标

完成td的媒体模块(基于react+umi+ant design),重构以前的ES6代码为TS代码

· ✅umi-type 脚手架

· ✅跑通代码

· ✅新建媒体页面

· ✅创建媒体model

· ✅媒体service

· ✅charles

· ✅接入dev环境

· ✅接入鉴权

· ✅页面列表

· ✅路由配置提取出来

· ✅结合td umi/webpack/ dva 配置

· ✅全局错误信息从接口读取

· �更换主题

· �深入代码(最重要的部分)

花了大概两天时间实现以上勾选内容,主要是熟悉ts的配置文件、构建配置、ts语法、以及react、dva如何写。

安装依赖

基本配置

tsconfig.json

这个文件指定了用来编译这个项目的根文件和编译选项

JSX参数指定工作模式:preserve 模式和 react 模式以及 react-native 模式。这三个模式只影响编译策略。preserve 模式会生成代码中会保留 JSX ,以供后续的转换操作使用(比如:Babel),输出的文件是 .jsx 格式的;而 react模式则会直接编译成 React.,在使用前就不需要再进行 JSX 转换了,输出的文件是 .js 格式的;react-native模式相当于preserve,它也保留了所有的JSX,但是输出文件的扩展名是.js。

jsconfig.json

指定根文件和Java语言服务提供的功能选项。

提示:如果您不使用Java,则无需担心jsconfig.json。

提示:jsconfig.json源于tsconfig.json,是Type的配置文件。jsconfig.json相当于tsconfig.json的“allowJs”属性设置为true。

webpack配置

文件后缀改成ts或者tsx

文件名为ts和tsx(React)后缀的代码了,它可以和现有的ES6代码共存,IDE会自动校验这部分代码,webpack打包也没问题了。

业务代码

目录截图

data.d.ts

定义业务对象数据结构接口(interface),字段类型可以是number,string,boolean,也可以是业务对象(下方的Member),也可以是多个值中的一个(下方的status,可以设置成枚举),不确定类型的时候用any,数组的话用用‘类型[]’,字段不一定存在用‘?’

model.ts

处理数据和逻辑,包含同步更新 state 的 reducers,处理异步逻辑的 effects,订阅数据源的 subions 。

Partial 作用是将传入的属性变为可选项.

Readonly 作用是将传入的属性变为变成只读

service.ts

定义接口请求的路径、方法和参数,返回为Promise

类组件

connect

connect dva 和 react component

函数组件

在@types/react中已经预定义一个类型type SFC,它也是类型interface StatelessComponent

的一个别名,此外,它已经有预定义的children和其他(defaultProps、displayName等等…),所以我们不用每次都自己编写!

form组件

高阶函数

最后

ts 使得代码变得非常清晰、可读、规范,虽然改起来有些工作量。希望后续的项目中可以应用起来。

react json转换_Typescript + React 新手篇相关推荐

  1. react数据集中式管理第四篇--@rematch/core

    今天,我们来介绍@rematch/core 其他几篇: react数据集中式管理第一篇–Redux初认识 react数据集中式管理第二篇–@reduxjs/toolkit react数据集中式管理第三 ...

  2. 如何使用React,TypeScript和React测试库创建出色的用户体验

    I'm always willing to learn, no matter how much I know. As a software engineer, my thirst for knowle ...

  3. b站React禹哥版视频笔记-React应用(基于react脚手架)

    目录 前言 一.初始化react脚手架 1.react脚手架: 2.创建项目并启动 二.脚手架文件介绍 1.public 2.src 三.一个简单的Hello组件 四.样式的模块化 五.vscode中 ...

  4. React 全家桶(react脚手架 redux react-redux react-router-dom ui库 reactHook)含 自定义hook的方法及使用

    文章目录 React 入门 React 简介 React 为何物 为何学习 React React 初体验 来一发 Hello React 创建虚拟 DOM 的两种方式:JS 和 JSX 虚拟 DOM ...

  5. 前端React教程第二课 React生命周期设计思想

    02 为什么 React 16 要更改组件的生命周期?(上) React 生命周期已经是一个老生常谈的话题了,几乎没有哪一门 React 入门教材会省略对组件生命周期的介绍.然而,入门教材在设计上往往 ...

  6. react.js app_在React.JS中创建一个Weather App

    react.js app Hello readers! 各位读者好! In this article, you will know how to develop a basic weather app ...

  7. React学习笔记一(React入门+JSX+脚手架)

    文章目录 1. React介绍和特点 1.1 React是什么 1.2 React的特点 2. React的开发依赖 2.1 React的三个依赖 2.2 Babel和React的关系 2.3 Rea ...

  8. 【React】1课 react框架小白入门使用教程

    首先创建一个文件夹在文件夹中创建index.html文件 在此之前需要电脑已安装node与npm 首先按住 shift + 鼠标右键 → (按下)在此处打开命令行窗口 进入命令行窗口 或者 win + ...

  9. 转载 React.createClass 对决 extends React.Component

    先给出结论,这其实是殊途同归的两种方式.过去我们一般都会使用 React.createClass 方法来创建组件,但基于 ES6 的小小语法糖,我们还可以通过 extends React.Compon ...

最新文章

  1. html基础:定义 图片 表格
  2. python 反爬取数据
  3. lg gram 笔记本 linux,lg gram 15笔记本使用雨林木风u盘安装win7系统教程?
  4. Leet Code OJ 172. Factorial Trailing Zeroes [Difficulty: Easy]
  5. 华为鸿蒙os电视测评,高端技术下放毫不吝啬!华为智慧屏SE系列评测:鸿蒙OS让入门大屏也好用...
  6. JAVA出现空指针异常(初学者)
  7. vscode找不到config_vscode中的 jsconfig.json
  8. FOI冬令营 Day2
  9. hive 建表_Hive建表和内外部表的使用
  10. [CareerCup][Google Interview] Find kth number in a BST
  11. 记一次ARM服务器(鲲鹏920)的PXE批量装机遇到的坑
  12. vnc远程连接,5个步骤教你如何轻松实现vnc远程连接
  13. (产品面试贴)乐动——阿里巴巴2015暑期实习平台型产品经理(技术领域)
  14. css td 强制换行,css表格强制换行
  15. Action Segmentation with Joint Self-Supervised Temporal Domain Adaptation
  16. android 重启 logo,MSM8909+Android5.1.1开机logo对应的splash.img生成
  17. 幅相曲线matlab,控制系统的幅相特性曲线绘制
  18. 黑客攻击入侵流程及常见攻击工具
  19. C语言,好爽(第一二三季)
  20. 数字化时代-6:从经济体所有制看赚钱的规模

热门文章

  1. java hibernate 插入数据_[Java教程]hibernate 返回新插入数据的Id
  2. jsp中String path = request.getContextPath()的作用
  3. queryselectorall 怎么取name_用这个方法,我爬取了《王者荣耀》《英雄联盟》等游戏皮肤图片...
  4. python面向对象思路_python面向对象方法
  5. mysql 云无忧ps教程_华为云数据库MySQL一键开通读写分离,无忧应对企业业务高峰情景...
  6. mybatis mysql selectkey_Mybatis示例之SelectKey的应用
  7. php 顺丰接口实例,顺丰BSP接口PHP开发注意事项
  8. java mysql dump_Java 调用Mysql dump 备份数据库
  9. python matplotlib 绘制曲线图,柱状图
  10. JAVA知识基础(五):深入理解final关键字