TypeScript 入门 | 青训营笔记

481 阅读3分钟

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

TypeScript 简介

TypeScript 是由微软开发的自由和开源的编程语言。它是 JavaScript 的超集,支持 ECMAScript 6 标准(ES6)。TypeScript 的设计目标是开发大型应用,它可以编译成纯 JavaScript,编译出来的 JavaScript 可以运行在任何浏览器上。

静态类型

TypeScript 通过类型注解提供编译时的静态类型检查。

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

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

JS 的超集

  • 包含与兼容所有 JS 特性,支持共存

  • 支持渐进式引入与升级

TypeScript 基本语法

基础数据类型

let q: string = 'aaa';  // 字符串
let w: number = 1;  // 数字
let e: boolean = true;  // 布尔值
let r: null = null;  // null
let t: undefined = undefined;  // undefined

对象类型

const bytedancer: IBytedancer = {
  jibId: 111,
  name: 'Lin',
  sex: 'man',
  age: 28,
  hobby: 'swimming'
}

interface IBytedancer {
  /* 只读属性:约束属性不可在对象初始化外赋值 */
  readonly jibId: number;
  name: string;
  sex: 'man' | 'woman' | 'other';
  age: number;
  /* 可选属性:定义该属性可以不存在 */
  hobby?: string;
  /* 任意属性:约束所有对象属性都必须是该属性的子类型 */
  [key: string]: any;
}

Snipaste_2022-08-05_17-32-58.png

函数类型

typescript 中的函数需要对参数和返回值进行类型声明:

function add(x: number, y: number): number {
  return x + y;
}

const mult: (x: number, y: number) => number = (x, y) => x * y;

数组类型

/* 方括号表示 */
type IArr1 = number[];
/* 泛型表示 */
type IArr2 = Array<string | number | Record<string, number>>;
/* 元组表示 */
type IArr3 = [number, boolean, string];
/* 接口表示 */
interface IArr4 {
  [key: number]: any;
}

const arr1: IArr1 = [1, 2, 3, 4, 5];
const arr2: IArr2 = [1, 2, '3', '4', {a: 1}];
const arr3: IArr3 = [1, true, 'a'];
const arr4: IArr4 = ['a', () => null, {}, []];

补充类型

/* 空类型,表示无赋值 */
type IEmptyFunction = () => void;
/* 任意类型,是所有类型的子类型 */
type IAnyType = any;
/* 枚举类型:支持枚举值到枚举名的正、反向映射 */
enum EnumExample {
  add = '+',
  mult = '*'
}
EnumExample['add'] === '+';
EnumExample['+'] === 'add';

enum ECorlor {Mon, Tue, Wed, Thu, Fri, Sat, Sun};
ECorlor['Mon'] === 0;
ECorlor[0] === 'Mon';
/* 泛型:不预先指定具体的类型,而在使用的时候再指定类型的一种特性 */
type IGetRepeatArrR = <T>(target: T) => T[];

当我们定义一个变量不确定类型的时候有两种解决方式:

  • 使用 any: 使用 any 时存在的问题,虽然知道传入值的类型但是无法获取函数返回值的类型,另外也失去了类型保护的优势。

  • 使用泛型: 泛型指的是在定义函数/接口/类型时,不预先指定具体的类型,而是在使用的时候在指定类型限制的一种特性。

类型别名 & 类型断言

ts 类型断言可以用来手动指定一个值的类型。类型断言只是欺骗编译器,让编译器可以编译通过,但是如果进行强制类型转换,在执行的过程中会报错。

断言的语法分为两种:

  • <> 尖括号
  • as 语法

注意:在 tsx 中必须使用 as

Snipaste_2022-08-05_18-09-57.png

小结

  1. 联合类型可以被断言成其中一个类型。

  2. 父类可以断言成子类。

  3. 任何类型可以断言成 any

  4. any 可以断言成任何类型。

最后

以上就是我在此次青训营课程 《TypeScript 入门》 中的一些思考和总结。