今天开始学一遍 @小满zs 的TS课程,在这里记录一下。
TS是JS的超集,所以JS基础的类型都包含在内。
npm i typescript -g // 安装 TS
tsc -v // 查看 TS 版本
tsc --init // TS 初始化 配置文件
tsc -w // ts 转 js 监听
node index.js // 运行 js文件
npm i ts-node -g
npm init -y // 生成 package.json 文件
npm i @types/node -D // 声明文件
ts-node index.ts // 直接运行 ts文件
一、基础类型
1.1 字符串类型(string)
let str: string = '鱼钓猫'
1.2 数字类型(number)
支持十六进制、十进制、八进制、二进制。
NaN 与 Infinity 也属于 number 类型。
let num1: number = 123
let num2: number = NaN
let num3: number = Infinity // 无穷大
let decimal: number = 6; // 十进制
let hex: number = 0xf00d; // 十六进制
let binary: number = 0b1010; // 二进制
let octal: number = 0o744; // 八进制
1.3 布尔类型(boolean)
let bool: boolean = true
1.4 空值类型(null undefined void)
let nul: null = null
let unde: undefined = undefined
// void 通常用于函数返回值的定义,表示没有返回值。
function Fn (): void {
/** 函数体 */
return
}
非严格模式下
let aa: void = null
let bb: void = undefined
nul = unde
unde = nul
区别:
与 void 的区别是,undefined 和 null 是所有类型的子类型。也就是说 undefined null 类型的变量,可以赋值给 string 类型的变量:
let str: string = "鱼钓猫"
let aa: void = null
str = aa // warning 不能将类型“void”分配给类型“string”。
let nul: null = null
let unde: undefined = undefined
// 非严格模式下
str = nul
str = unde
二、顶级类型 any unknown
- top type顶级类型:any unknown
- 一级:Object
- 二级:Number String Boolean 实例
- 三级:number string boolean
- 四级:1 ‘鱼钓猫’ true
- 五级:never
- any 类型的值可以任意赋值,unknown 类型的值只能赋值自身或是 any 类型值。
let str: string = "鱼钓猫"
let unk: unknown = {}
let any: any = {}
str = any // √
str = unk // warning:不能将类型“unknown”分配给类型“string”。
- unknown 类型没有办法读取任何属性,也无法调用方法,所以比 any 更加安全
let unk: unknown = {name: '鱼钓猫', fn: () => 1243}
unk.name // error “unk”的类型为“未知” 直接运行报错
扩展:Object、object 和 {} 的区别
- Object:包含了所有的值。原型链中所有的原始类型和对象类型都指向 Object。
let obj1: Object = 123
let obj2: Object = "123"
let obj3: Object = false
let obj4: Object = {}
let obj5: Object = []
let obj6: Object = () => 123
- object:常用于泛型约束,代表非原始类型(引用类型)。
let obj4: object = {}
let obj5: object = []
let obj6: object = () => 123
- {} 字面量:可以理解为 new Object(),和 Object 差不多,可以赋任意值。