一、TS基础类型
1.JS已有类型
- 原始类型:number/string/boolean/null/undefined/symbol
- 对象类型:object(包括数组,对象,函数等对象)
2.TS新增类型
- 联合类型、自定义类型(类型别名)、接口、元组、字面量类型、枚举、void、any等
数据类型 | 取值 | 举例 |
boolean | 布尔值,true/false | let flag:boolean=true |
number | 数字,双精度 64 位浮点值。如12,1.37,0b1010,0o12,0xa | let a:number=0xa |
string | 字符串,如"abc",'abc' 使用单引号(')或双引号(")来表示字符串类型。反引号(`)来定义多行文本和内嵌表达式 | let name:string="Lisa" let str:string=`我是${username}}` |
undefined | 默认情况下 null 和 undefined 是所有类型的子类型,比如说可以把 null 和 undefined 赋值给 number 类型的变量;null表示对象值缺失,undefined用于初始化变量为一个未定义的值。 | let u:undefined=undefined |
null | let n:null=null | |
array | 数组 | let list1:number[]=[1,2,3] let list2:Array<number>=[1,2,3] |
object | 表示非原始类型,也就是除 number,string,boolean之外的类型 | obj:object |
tuple | 元组,确切地知道包含多少个元素,以及每个索引对应的元素类型 | let t1:[string,number] t1 =['hi',12] |
enum | 枚举,用于定义数值集合。enum 类型是对 JavaScript 标准数据类型的一个补充 | enum Color { Red, Green, Blue } let myColor: Color = Color.Green// 1 console.log(myColor, Color.Red, Color.Blue) //1 0 2 |
any | 任意数据类型,可以赋予任意类型的值。 | let a: any = 1 a = "哈哈" a = false |
void | 与 any 类型相反,它表示没有任何类型。用于标识方法返回值的类型,表示该方法没有返回值。 | 声明一个 void 类型的变量没有什么大用,因为只能为它赋予 undefined |
never | 是其它类型(包括 null 和 undefined)的子类型,代表从不会出现的值。这意味着声明为 never 类型的变量只能被 never 类型所赋值,在函数中它通常表现为抛出异常或无法执行到终止点(例如无限循环) 任何类型都不能赋值给 never 类型的变量 | let x: never; x = (()=>{ throw new Error('exception')})(); |
联合类型 | 联合类型,例如number | string | x:number|string |
类型断言 | 类型断言可以用来手动指定一个值的类型,即允许变量从一种类型更改为另一种类型。 方式一: <类型>值 方式二: 值 as 类型 tsx中只能用这种方式 注意:类型断言只是欺骗编译器,让编译器可以编译通过,但是如果强制类型转换,在执行的过程中会报错 | if((<string>x).length){ return(x asstring).length }else{ return x.toString().length } const aLink = document.getElementById('link') as HTMLAnchorElement 获取元素类型的方法:开发者工具打开,选择元素,在控制台输入console.dir($0)可获取选中元素的类型,拉到打印内容最后一行 |
类型推断 | TS会在没有明确的指定类型的时候推测出一个类型. 1. 定义变量时赋值了, 推断为对应的类型. 2. 定义变量时没有赋值, 推断为any类型 3.函数返回值类型可以省略 | |
unknown
|
可以被任何类型赋值,但是不能赋值给任何类型。
当我们真的不知道类型是什么时,可以使用unknown做处理 unknown 类型也被认为是 top type ,但它更安全。与 any 一样,所有类型都可以分配给unknown |
let value
:
unknown;
value=true; value=12 value="jim" let a:boolean=value(这句报错Error) |
类型别名 | 使用type关键字给对象定义类型 | type CustomArray = (number | string)[] let arr1: CustomArray = [1, 'a', 2] |
字面量类型 | 可以使用变量值作为类型 | let str1 = 'Hello TS' const str2 = 'Hello TS'//str2变量的类型为Hello Ts,可以使用数值作为类型,称为字面量类型 let age1: 18 = 18 function changeDirection(direction: 'up' | 'down' | 'left' | 'right') { console.log(direction); } changeDirection('down') |
let num: number = 1;
// num="a" //error TS2322: Type 'string' is not assignable to type 'number'.
console.log(num)
//ts执行的两种方式
// (1)执行 tsc XX.ts命令,由ts=>js;node XX.js
//(2)npm i -g ts-node;ts-node XX.ts
let a: number = 0xa
let username: string = "maidu_xbd"
let str: string = `我是${username}}`
let flag: boolean = true
let u: undefined = undefined
let n: null = null
let s: symbol = Symbol()
// 数组array
let list1: number[] = [1, 2, 3]
let list2: Array<number> = [1, 2, 3]
let list3: string[] = ["1", "3"]
//联合类型
let list4: (number | string)[] = [1, "a", 4, "m"]//()一定要有
let list5: number | string[] = 1
let list6: number | string[] = ['a', 'm']
//类型别名,使用type关键字
type CustomArray = (number | string)[]
let arr1: CustomArray = [1, 'a', 2]
//元组tuple-确切地知道包含多少个元素,以及每个索引对应的信息。
let t1: [string, number]
t1 = ['hi', 12]
//类型推断
// 1. 定义变量时赋值了, 推断为对应的类型.
// 2. 定义变量时没有赋值, 推断为any类型
//3.函数返回值类型可以省略
let age = 22
let a1
a1 = 12
a1 = "hello"
二、TS变量
变量是一种使用方便的占位符,用于引用计算机内存地址。我们可以把变量看做存储数据的容器。
2.1变量声明
声明变量的四种方式 | 举例 | |
声明变量的类型及初始值 | var [变量名] : [类型] = 值; | var str:string="hi" |
声明变量的类型,但没有初始值,变量值会设置为 undefined | var [变量名] : [类型]; | var str:string |
声明变量并初始值,但不设置类型,该变量可以是任意类型 | var [变量名] = 值; | var str="123" |
声明变量没有设置类型和初始值,类型可以是任意类型,默认初始值为 undefined | var [变量名]; | var str |
2.2 变量作用域
变量作用域 | 说明 |
全局作用域 | 全局变量定义在程序结构的外部,可在代码的任何位置使用。 |
类作用域 | 这个变量也可以称为 字段。类变量声明在一个类里头,但在类的方法外面。 该变量可以通过类的对象来访问。 类变量也可以是静态的,静态的变量可以通过类名直接访问。 |
局部作用域 | 局部变量,局部变量只能在声明它的一个代码块(如:方法)中使用 |
三、运算符
运算符用于执行程序代码运算
分类 | 运算符 | 说明 |
算数运算符(7类) | + 、-、 * 、/ 、% 、++ 、-- | y=x++,先将x值赋值给y,再执行x+1; y=++x,先执行x+1,再赋值给y |
关系运算符(6类) | ==、!=、>、<、>=、<= | 运算结果为true或false |
逻辑运算符(3类) | &&、||、! | 运算结果为true或false &&假前真后,||真前假后 |
位运算符(7类) | &、|、~(取反)、^(异或)、<<、>>、>>>(无符号右移) | 位操作是程序设计中对位模式按位或二进制数的一元和二元操作 |
赋值运算符(5类) | =、+=、-=、*=、/= | 赋值运算符用于给变量赋值 |
三元运算符 | ? | Test ? expr1 : expr2 如果条件语句 Test 返回 true,返回expr1,否则返回expr2 |
字符串运算符 | +(连接运算符) | + 运算符可以拼接两个字符串 |
负号运算符 | - | 更改操作数的符号 |
类型运算符 | typeof 、instanceof | typeof 是一元运算符,返回操作数的数据类型。 instanceof 运算符用于判断对象是否为指定的类型 |