TypeScript实践总结
下文将TypeScript简称ts
一、为什么要学
1.1 减少bug,提高质量
- 强语言,语法等方面异常,编译阶段“提前”报错
- 支持面向对象,软件设计与工程化更为成熟,更容易做单元测试、持续集成等
1.2 提高效率
- 语言简单易学
- ide支持更为友好,如:智能提示、变量强关联、重构等
- 绝大部分常用类库已经支持
1.3 业内趋势
1.4 代表作品
- 越来越多前端类库改用ts
- github上使用ts开发仓库-按star降序
- vscode
- node下一代-deno
- angular
- nest
- apollo-client
- ....不一一举例
二、练级攻略
2.1 基础语法
2.2 编码风格
2.3 核心功能
- tsconfig.json
- 接口
- 泛型
- 高级类型
- 面向对象
- [程序设计]
2.4 编译原理
三、适用场景
尤其适合:类库、组件等公共组件开发
四、推荐ide
webstorm > vscode
优点: 开箱即用(无需安装插件)、易于重构【个人觉得非常重要】
缺点: 收费、没idea成熟
五、推荐书籍
- TypeScript入门与实战
- 推荐级别A,理由:介绍全面,适合入门及进阶
- 深入理解TypeScript
- 推荐级别B,理由:入门及编译简介
六、tsconfig.json配置demo
{
"compilerOptions": {
"pretty": true,
"module": "commonjs",
"importHelpers": true,
"target": "es5",
"lib": [
"es2015",
"es2016",
"es2017",
"es2018",
"es2019",
"dom",
"ES2015.Promise"
],
"allowJs": true,
"sourceMap": false,
"baseUrl": "./src",
"outDir": "./build/src/",
"paths": {
"@/*": [
"*"
],
"tslib": [
"path/to/node_modules/tslib/tslib.d.ts"
]
},
//编译异常时候,禁止发行
"noEmitOnError": true,
//禁止隐性any
"noImplicitAny": true,
//严格的null检查,避免如可选参数,未判断undefined引发的问题等
"strictNullChecks": true,
//未使用的变量,抛出错误
"noUnusedLocals": true,
//未使用的参数,抛出错误
"noUnusedParameters": true,
//检查函数是否有返回值
"noImplicitReturns": true,
//启用严格模式,对类型赋值、类型转换更严格
"strict": true,
//https://mariusschulz.com/blog/downlevel-iteration-for-es3-es5-in-typescript
"downlevelIteration": true
},
"typeRoots": [
"node_modules/@types",
"typings"
],
"include": [
"src/**/*.ts"
],
"exclude": [
"node_modules",
"test"
]
}
八、ts的缺点
8.1 不得已的any类型
存在后的坑: any类型,不支持强类型、智能提示等,相当于把ts回退到js
存在原因:
1.兼容性,老代码及外部依赖如webapi接口返回参数类型不确定,只能用any类型;
2.类库不健全,lid.d.ts不全面,导致部分属性、方法的类型描述不完整,得通过添加|any组合类型才能满足需求,不得不用any类型。
改进办法: 有明确类型的通过组合类型来完成类型定义,如: age:int | any,比纯any,IDE能添加相关的属性智能提示及部分错误使用场景下的错误提示
8.2 复合类型没必要
组合类型、交叉类型、索引类型、映射对象类型,意义不大,适用场景少,易滥用,明显降低可读性。js的问题是语言太随意,导致很多程序员把大量的时间浪费在语法上,多向golang学一下
8.3 面向对象不彻底
不支持重载:c#、java没抄好?不是,是底层js不支持
8.4 JS本身诸多缺点
(1)js是门非常容易出bug的语言,当下统计数据多数不准。原因在于生产环境js运行在客户端浏览器,出了bug,要么没前端监控,要么没被QA发现。
(2)js上手很容易,学好很难,一种需求,有N种编码方案,沟通交流成本很高
9. 最佳实践
- 整洁的js代码
- 整洁的js代码-中文翻译
- 将超过5000万行JS代码迁移到TypeScript,我们得到的10大见解
- Typescript Best Practices
- TypeScript系列(五)最佳实践
- ts面向对象边界?建议服务端:尽量面向对象编程;客户端:关注打包大小及编译后的js代码,易复用的业务逻辑抽象为类,工具类还是使用传统的面向过程的方式
- 减少any类型
- ......TODO待补充
TypeScript实践总结的更多相关文章
- 《Vue3.x+TypeScript实践指南》已出版
转眼回长沙快2年了,图书本在去年就已经完稿,因为疫情,一直耽搁了,直到这个月才出版!疫情之下,众生皆苦!感觉每天都是吃饭.睡觉.上班.做核酸! 图书介绍 为了紧跟技术潮流,该书聚焦于当下火的Vue3和 ...
- Serverless 实战 —— 函数计算 + Typescript 实践
前言 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute):函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传.函数计算准 ...
- 前端项目模块化的实践3:使用 TypeScript 的收益
以下是关于前端项目模块化的实践,包含以下内容: 搭建 NPM 私有仓库管理源码及依赖: 使用 Webpack 打包基础设施代码: 使用 TypeScript 编写可靠类库 使用 TypeScript ...
- TypeScript在react项目中的实践
前段时间有写过一个TypeScript在node项目中的实践. 在里边有解释了为什么要使用TS,以及在Node中的一个项目结构是怎样的. 但是那仅仅是一个纯接口项目,碰巧赶上近期的另一个项目重构也由我 ...
- TypeScript在node项目中的实践
TypeScript在node项目中的实践 TypeScript可以理解为是JavaScript的一个超集,也就是说涵盖了所有JavaScript的功能,并在之上有着自己独特的语法.最近的一个新项目开 ...
- 在React旧项目中安装并使用TypeScript的实践
前言 本篇文章默认您大概了解什么是TypeScript,主要讲解如何在React旧项目中安装并使用TypeScript. 写这个的目的主要是网上关于TypeScript这块的讲解虽然很多,但都是一些语 ...
- Typescript 开发环境的最佳实践
Typescript 开发环境的最佳实践 0️⃣ git init(略) 1️⃣️️ 初始化:$ yarn add -D ts-node typescript 2️⃣ 生成 tsconfig.json ...
- Typescript 最佳实践
文章列表: <一>大话 TypeScript 基本类型 <二>大话 Typescript 枚举 <三>大话 Typescript 接口 <四>大话 Ty ...
- TypeScript 在开发应用中的实践总结
背景 以前 hybrid app 的移动端开发模式下,H5 和客户端通信的 js sdk 代码使用 js 编写,sdk 方法的说明使用文档输出.对于开发的使用来说,在 IDE 中不能得到友好的参数类型 ...
- TypeScript 前端工程最佳实践
作者:王春雨 前言 随着前端工程化的快速发展, TypeScript 变得越来越受欢迎,它已经成为前端开发人员必备技能. TypeScript 最初是由微软开发并开源的一种编程语言,自2012年10月 ...
随机推荐
- Git、Github、Gitlab与Gitee
Git.Github.Gitlab与Gitee之间的关系 Git 是一种版本控制系统,是一个命令,是一种工具,有点像cmd(命令行工具). Github 是一个基于git实现在线代码托管的仓库,向互联 ...
- TienChin 活动管理-活动状态完善
修改字典 修改活动状态字典,将之前的数据键值为 0 的数据标签内容改为 过期: 更改下数据库的描述,禁用改为过期: ALTER TABLE `tienchin_activity` MODIFY COL ...
- 多智能体强化学习算法【一】【MAPPO、MADDPG、QMIX】
相关文章: 常见多智能体强化学习仿真环境介绍[一]{推荐收藏,真的牛} 多智能体强化学习算法[一][MAPPO.MADDPG.QMIX] 多智能体强化学习算法[二][MADDPG.QMIX.MAPPO ...
- 6.9 Windows驱动开发:内核枚举进线程ObCall回调
在笔者上一篇文章<内核枚举Registry注册表回调>中我们通过特征码定位实现了对注册表回调的枚举,本篇文章LyShark将教大家如何枚举系统中的ProcessObCall进程回调以及Th ...
- python-ssh链接linux查询日志,并按日志等级在控制台分颜色输出日志
import paramiko # unicode_utils.py def to_str(bytes_or_str): """ 把byte类型转换为str :param ...
- php批量更新多条数据
/** * @param $table 表名 * @param array $multipleData 拼接的批量更新的数组格式: * $students = [['id' => 1, 'cit ...
- 如何快速获取AWR中涉及到的表
最近遇到一个很少见的需求,是关于应用测试方面的. 具体来说,这个应用的测试需求要基于一个固定的时间点数据,而且只能测试一轮,再测试就需要还原到测试前状态. 因为我们使用的存储是分层的(热数据在Flas ...
- delphi TDBLookupComboboxEh 的项目设置
- Excel-批量填充数字
1.一般情况下,都是使用鼠标左右键拖动来实现数据的填充的 2.但是填充1200列,下拉拖动就非常麻烦,可以首先定位到A200. 在屏幕左侧中央处找到剪切板下方的"A1"字样,鼠标单 ...
- Hadoop的stop-all无法关闭集群原因及解决方案
问题现象:在服务器上长时间运行hadoop之后,如果运行stop-all.sh,会发现: [root@node1 sbin]# stop-all.shThis script is Deprecated ...