# TS

# 环境搭建

  1. 下载node.js (opens new window)
  2. 全局安装typescript

设置淘宝镜像

npm config set registry https://registry.npm.taobao.org

npm i -g typescript
  1. 创建ts文件(a.ts)
    • 注意浏览器不认识ts,需要进行编译
tsc .\a.ts

# 基本类型

# 类型声明

  • 类型声明是TS非常重要的一个特点
  • 通过类型声明可以指定TS中变量(参数、形参)的类型
  • 指定类型后,当为变量赋值时,TS编译器会自动检查值是否符合类型声明,符合则赋值,否则报错
  • 简而言之,类型声明给变量设置了类型,使得变量只能存储某种类型的值

# 语法

let 变量: 类型;

let 变量: 类型 =;

function fn(参数: 类型, 参数: 类型): 类型 {
...
}

# 类型

类型 例子 描述
number 1, -33, 2.5 任意数字
string 'hi', "hi", hi 任意字符串
boolean true、false 布尔值true或false
字面量 其本身 限制变量的值就是该字面量的值
any * 任意类型
unknown * 类型安全的any
void 空值(undefined) 没有值(或undefined)
never 没有值 不能是任何值
object {name:'孙悟空'} 任意的JS对象
array [1,2,3] 任意JS数组
tuple [4,5] 元素,TS新增类型,固定长度数组
enum enum{A, B} 枚举,TS中新增类型

# 字面量

//类似于常量,只能a或者b
let a: "a" | "b";

// a = "c";//报错

let b: "a" | false | true;

b = true;

# 断言 as

类似于强转

let b: "a" | false | true;
b = true;
let unknowStr: unknown;
//方式1
b = unknowStr as boolean;
//方式2
b = <boolean>unknowStr;

# object

对象可以包含哪些属性

let obj: {
   name: string,
   age: number,
   sex: string;
   // ? 表示这个属性可有可无
   address?:string
};

obj = {
   name: "zs",
   age: 18,
   sex: "男",
}


let objAnyField: {
   name: string,
   //上面的写法问题是如果多个不必要的属性需要一个一个写
   // [otherField: string]: any ,这样写表示任意的属性都可以
   [otherField: string]: any
};

objAnyField = {
   name: "12",
   age: 19
}

# function

let log = (str: string) => {};

log = function (name) {
    console.log(name)
};

# enum

enum Sex {
   MAN,
   WOMAN,
}

enum Name {
   ZS = "张三",
   LS = "李四",
}
let User: {
   name: Name,
   sex: Sex
}

User = {
   name: Name.ZS,
   sex: Sex.MAN
}

# 别名

好处就是多个定义的类型都相同可以省略重复写

type ageRange = 18 | 19 | 20 | 21 | 22 | 23 | 24;

let age: ageRange;
let day: ageRange;

age = 19;