TypeScript够用的一篇总结,献给那些在Java开发道路上一直前行的伙伴!

一、前言

那么多特性吓尿了,实际上写业务用的特性不多。五月底ts正式升级了4.3版本,4.4也已经在beta版本了。差不多先生,够用就行,这里更多的是,以自己的理解去总结一下常用的ts特性。有理解错误的,欢迎大哥指正👏🏻

知识这种东西,学了还是要总结下,梳理清楚自己对当前知识的掌握程度。偷懒了一段时间,接下来要好好发力了。

二、ts的优缺点

1、优点

  • 代码的可读性和可维护性:举个🌰看后端某个接口返回值,一般需要去network看or去看接口文档,才知道返回数据结构,而正确用了ts后,编辑器会提醒接口返回值的类型,这点相当实用。
  • 编译阶段就发现大部分错误,避免了很多线上bug
  • 增强了编辑器和 IDE 的功能,包括代码补全接口提示跳转到定义重构

2、缺点

  • 有一定的学习成本,需要理解接口(Interfaces)、泛型(Generics)、类(Classes)、枚举类型(Enums)等前端工程师可能不是很熟悉的概念
  • 会增加一些开发成本,当然这是前期的,后期维护更简单了
  • 一些JavaScript库需要兼容,提供声明文件,像vue2,底层对ts的兼容就不是很好。
  • ts编译是需要时间的,这就意味着项目大了以后,开发环境启动和生产环境打包的速度就成了考验

或多或少,听到过的开发体验最好的架构:React Hooks + TypeScript。目前也在用,还在学习中,至于到底好不好,我还是对vue 情有独钟。前端还在快速发展中,后面再出来个xxxScript,谁也说不好。所以一个字:学!

三、anyScript

可能因为业务场景或者业务紧张,or某个跑路的大哥省了点功夫,用了typeScript的项目也可能会变成anyScript。以下是几种救急的方式(大哥们还没有其他办法):

  • // @ts-nocheck 禁用整个文件的ts校验
  • // @ts-ignore 禁用单行ts校验
  • any和unknown

不建议多用,但也不是不能用,有些场景确实不好写ts定义。这个时候就不要硬憋自己了,写个备注any下。

抛个面试题:你知道any和unknown的区别吗?

回归正题,开始学习,总结一些项目中使用较多的,一些TS高级特性这里就不说了。

四、ts类型

本篇所有demo都可在 [TypeScript Playground] 运行,不理解的建议都来跑跑看。

image.png

1、基础类型

  • 常用:boolean、number、string、array、enum、any、void
  • 不常用:tuple、null、undefine、never
const count: number = 20210701;

2、对象类型

简单理解interface 和 type 的区别:type 更强大,interface 可以进行声明合并,type 不行;

看个人习惯,一般声明都用interface,需要用到其他变量类型,type多一些。有没有interface或type一把梭的🤣?

interface Hero {
   
  name: string;
  age: number;
  skill: string;
  skinNum?: number;
  say(): string; // say函数返回值为string
  [propname: string]: any; // 当前Hero可定义任意字符串类型的key
}
// 继承
interface littleSoldier extends Hero {
   
  rush(): string;
}
// 任意类型
interface IAnyObject {
   
  [key: string]: any;
}

type Hero = {
   
  name: string,
  age: number,
  skill: string,
  skinNum?: number,
};

3、数组类型

项目中常见的写法,需要声明列表数据类型:

interface IItem {
   
  id: number;
  name: string;
  isDad: boolean;
}
const objectArr: IItem[] = [{
    id: 1, name: '俊劫', isGod: true }];
// or
const objectArr: Array<IItem> = [{
    id: 1, name: '俊劫', isGod: true }];

const numberArr: number[] = [1, 2, 3];

const arr: (number | string)[] = [1, "string",
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

牛战士从不脱下面具

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值