下文将TypeScript简称ts

一、为什么要学

1.1 减少bug,提高质量

  • 强语言,语法等方面异常,编译阶段“提前”报错
  • 支持面向对象,软件设计与工程化更为成熟,更容易做单元测试、持续集成等

1.2 提高效率

  • 语言简单易学
  • ide支持更为友好,如:智能提示、变量强关联、重构等
  • 绝大部分常用类库已经支持

1.3 业内趋势

1.4 代表作品

二、练级攻略

2.1 基础语法

2.2 编码风格

2.3 核心功能

2.4 编译原理

三、适用场景

尤其适合:类库、组件等公共组件开发

四、推荐ide

webstorm > vscode

优点: 开箱即用(无需安装插件)、易于重构【个人觉得非常重要】

缺点: 收费、没idea成熟

五、推荐书籍

六、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. 最佳实践

TypeScript实践总结的更多相关文章

  1. 《Vue3.x+TypeScript实践指南》已出版

    转眼回长沙快2年了,图书本在去年就已经完稿,因为疫情,一直耽搁了,直到这个月才出版!疫情之下,众生皆苦!感觉每天都是吃饭.睡觉.上班.做核酸! 图书介绍 为了紧跟技术潮流,该书聚焦于当下火的Vue3和 ...

  2. Serverless 实战 —— 函数计算 + Typescript 实践

    前言 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute):函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传.函数计算准 ...

  3. 前端项目模块化的实践3:使用 TypeScript 的收益

    以下是关于前端项目模块化的实践,包含以下内容: 搭建 NPM 私有仓库管理源码及依赖: 使用 Webpack 打包基础设施代码: 使用 TypeScript 编写可靠类库 使用 TypeScript ...

  4. TypeScript在react项目中的实践

    前段时间有写过一个TypeScript在node项目中的实践. 在里边有解释了为什么要使用TS,以及在Node中的一个项目结构是怎样的. 但是那仅仅是一个纯接口项目,碰巧赶上近期的另一个项目重构也由我 ...

  5. TypeScript在node项目中的实践

    TypeScript在node项目中的实践 TypeScript可以理解为是JavaScript的一个超集,也就是说涵盖了所有JavaScript的功能,并在之上有着自己独特的语法.最近的一个新项目开 ...

  6. 在React旧项目中安装并使用TypeScript的实践

    前言 本篇文章默认您大概了解什么是TypeScript,主要讲解如何在React旧项目中安装并使用TypeScript. 写这个的目的主要是网上关于TypeScript这块的讲解虽然很多,但都是一些语 ...

  7. Typescript 开发环境的最佳实践

    Typescript 开发环境的最佳实践 0️⃣ git init(略) 1️⃣️️ 初始化:$ yarn add -D ts-node typescript 2️⃣ 生成 tsconfig.json ...

  8. Typescript 最佳实践

    文章列表: <一>大话 TypeScript 基本类型 <二>大话 Typescript 枚举 <三>大话 Typescript 接口 <四>大话 Ty ...

  9. TypeScript 在开发应用中的实践总结

    背景 以前 hybrid app 的移动端开发模式下,H5 和客户端通信的 js sdk 代码使用 js 编写,sdk 方法的说明使用文档输出.对于开发的使用来说,在 IDE 中不能得到友好的参数类型 ...

  10. TypeScript 前端工程最佳实践

    作者:王春雨 前言 随着前端工程化的快速发展, TypeScript 变得越来越受欢迎,它已经成为前端开发人员必备技能. TypeScript 最初是由微软开发并开源的一种编程语言,自2012年10月 ...

随机推荐

  1. TienChin 活动管理-准备工作

    配置权限 INSERT INTO `sys_menu` VALUES (2014, '添加活动', 2003, 1, '', NULL, NULL, 1, 0, 'F', '0', '0', 'tie ...

  2. Python 实现文件关键字扫描

    第一段代码用户传入一个文件夹,自动扫描文件夹内特定文件是否存在某些关键字,如果存在则输出该文件的路径信息. # coding=gbk import sys,os,re def spider(scrip ...

  3. C++ STL 标准模板库(排序/集合/适配器)算法

    C++ 标准模板库STL,是一个使用模板技术实现的通用程序库,该库由容器container,算法algorithm,迭代器iterator,容器和算法之间通过迭代器进行无缝连接,其中所包含的数据结构都 ...

  4. Python实现栈、队列、双端队列

    栈的实现 class Stack(): def __init__(self): self.items = [] def push(self, item): self.items.append(item ...

  5. Docker从认识到实践再到底层原理(二-1)|容器技术发展史+虚拟化容器概念和简介

    前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助. 高质量博客汇总 然后就是博主最近最花时间的一 ...

  6. Vulkan学习苦旅06:创建渲染通道(VkRenderPass)

    对于一个复杂的图形应用程序,需要多个过程的配合,以生成图像的各个部分.通常,各个过程间存在着依赖关系,例如某个过程生成的图像(输出)被另一个过程使用(作为此过程的输入).在Vulkan中,每个过程被称 ...

  7. ListView改变行高的技巧

    改变 ListView 的行高 (Line Height) (cjc,2009.6.2) 改变 ListView 的行高 (Line Height) (cjc,2009.6.2) ListView在R ...

  8. [Kafka]Kafka学习 -- 初识Kafka

    Kafka学习 -- 初识Kafka 参考资料:稀土掘金<图解Kafka之实战指南>https://juejin.cn/book/6844733793220165639 Kafka是一个多 ...

  9. NC19999 [HAOI2016]放棋子

    题目链接 题目 题目描述 给你一个N*N的矩阵,每行有一个障碍,数据保证任意两个障碍不在同一行,任意两个障碍不在同一列,要求你在这个矩阵上放N枚棋子(障碍的位置不能放棋子),要求你放N个棋子也满足每行 ...

  10. NC23413 小A买彩票

    题目链接 题目 题目描述 小A最近开始沉迷买彩票,并且希望能够通过买彩票发家致富.已知购买一张彩票需要3元,而彩票中奖的金额分别为1,2,3,4元,并且比较独特的是这个彩票中奖的各种金额都是等可能的. ...