TypeScript入门 | 青训营笔记

95 阅读3分钟

这是我参与「第五届青训营 」笔记创作活动的第8天

01.为什么是TypeScript?

TypeScript发展历史

·2012-10:微软发布了TypeScript第一个版本(0.8)

·2014-10:Angular发布了基于 TypeScript的2.0版本

•2015-04:微软发布了Visual Studio Code

·2016-05:@types/react发布,TypeScript 可开发React

•2020-09:Vue发布了3.0版本,官方支持 TypeScript

2021-11:v4.5版本发布

js和ts的比较

js动态类型,弱类型语言

ts静态类型,弱类型语言

动态类型是在执行阶段才能匹配,在执行过程中,js才会与之匹配

静态类型语言,会提前执行,比如,java,python

静态类型

可读性增强:基于语法解析TSDoc,ide增强

可维护性增强:在编译阶段暴露大部分错误

多人合作的大型项目中,获得更好的稳定性和开发效率

JS的超集

·包含于兼容所有Js特性,支持共存

支持渐进式引入与升级

编辑器推荐:vs code

02.基本语法

类型分配

创建变量时,TypeScript 有两种分配类型的方式:

显式的 - 明确写出类型。更易于阅读且更有目的性。

隐式的 - 不写出类型,TypeScript 将根据分配的值“猜测”类型(称为 infer 类型推导)。分配更短,输入速度更快,并且经常在开发和测试时使用.

基础数据类型

/* 字符串 */ const q ='string'; /* 数字 */ const w = 1;/ /* 布尔值 */ const e = true; /* null *const r = null; /* undefined */ const t = undefined;

对象类型

const bytedancer:IBytedancer = { jobId: 9303245, name: 'Lin', sex: 'man', age: 28, hobby:'swimming', } interface IBytedancer { /* 只读属性: 约束属性不可在对象初始化外赋值 */ readonly jobId: number;name: string; sex: 'man''woman 'other'; age: number; /* 可选属性: 定义该属性可以不存在 */ hobby?: string; /* 任意属性: 约束所有对象属性都必须是该属性的子类型 */ [key: string]: any; } /* 报错: 无法分配到 "jobId"因为它是只读属性 */ bytedancer.jobId = 12345; /* 成功: 任意属性标注下可以添加任意属性 */ bytedancer.plateform = 'data'; /* 报错: 缺少属性“name",hobby可缺省 */ const bytedancer2: IBytedancer = { jobId: 89757, sex:'woman', age: 18, }

特殊类型

TypeScript 具有可能不引用任何特定类型数据的特殊类型。

any

any 是一种禁用类型检查并有效地允许使用所有类型的类型。any 类型是一种消除错误的有用方法,因为它禁用了类型检查,但 TypeScript 将无法提供类型安全,并且依赖类型数据的工具(例如自动完成)将无法工作。所以,我们应尽量避免使用它。

unknown

unknown 类型表示任何值,类似于 any 类型,但更安全,因为用未知值做任何事情都是不合法的。由于 any 违背了类型检查的初衷,一般不建议使用,尤其在有了 unknown 类型之后。

never

never 代表从不会出现的值,在函数中它通常表现为抛出异常或无法执行到终止点(例如无限循环)。never 很少单独使用,它的主要用途是在高级泛型中。

void

表示函数没有任何返回语句,或者不从这些返回语句返回任何显式值。在 JavaScript 中,不返回任何值的函数将隐式返回值 undefined。但是,void 和返回 undefined 在 TypeScript 中不是一回事。