TypeScript入门|青训营笔记

77 阅读2分钟

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

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:静态类型的弱类型语言

弱类型语言的特征:类型转换。当我们运行一个字符串和数字相加的时候,会自动进行隐式类型转换。而在强类型语言中是没办法相加的。

静态类型

  • 可读性增强: 基于语法解析TSDoC, ide增强
  • 可维护性增强:在编译阶段暴露大部分错误 => 多人合作的大型项目中,获得更好的稳定性和开发效率

JS的超集

  • 包含兼容所有JS的特性,支持共存
  • 支持渐进式的引入与升级

基本数据类型

JS:

const q = 'string';
/*字符串*/
const w = 1;
/*数字*/
const e = true;
/*布尔值*/
const r = null;
/*null*/
const t = undefined;
/*未定义*/
复制代码

TS:

属性名: 属性类型 = 属性值;
const q: string = 'string';
/*字符串*/
const w: number = 1;
/*数字*/
const e: boolean = true;
/*布尔值*/
const e: null = null;
/*null*/
const t: undefined = undefined;
/*undefined*/

对象类型

const bytedancer: IBytedancer = {
jobID: 9303245,
name: 'Lin',
gender: 'man',
age: 20,
}
/*对象实例*/
​
interface IBytedancer {
属性名: 属性类型
readonly jobID: number; /*只读属性:不可在对象初始化外赋值*/
name: string;
gender: 'man' | 'woman' | 'other';
age: number;
hobby?: string; /*可选属性: 该属性可以不存在*/
[key: string]: any; /*任意属性: 自定义属性必须是该属性的子类型*/
}
/*对象定义*/

泛型

不预先指定具体的类型,而在使用的时候再指定类型的一种特性

  • 泛型接口&多泛型

      interface IX<T, U> {
          key: T;
          val: U;
      }
      
    复制代码
    
  • 泛型类

      class IMan<T> {
          instance: T;
      }
      
    复制代码
    
  • 泛型别名

      type ITypeArr<T> = Array<T>
      
    复制代码
    
  • 泛型约束:限制泛型必须符合字符串

  • 泛型参数默认类型

字符串/数字 字面量

允许指定字符串/数字必须的固定值

高级类型

联合/交叉类型

类型保护与类型守卫

工程应用

Webpack

  • 配置webpack loader相关配置
  • 配置tsconfig.js相关文件
  • 运行webpack启动,打包
  • loader处理ts文件时,会自动进行编译与类型检查

使用TSC编译

  • 安装node与npm
  • 使用npm安装tsc
  • 配置tsconfig.js文件
  • 使用tsc运行编译得到js文件

\