#国庆快乐!来点干货~ #
#项目中团队总结生产问题,40%是类型相关问题,可见TS的重要性与向好趋势#
TS是JS的超集
类型
Number、String、Boolean
首字母大小写,类型有区别,譬如:
string是基元(原始类型)
let str = 'hello'
String是包装对象
let str = new String('world')
String对内存不友好,建议用string
string
number
boolean
null
undefined
bigint
symbol
object
object
存储 非原始类型
快捷记忆:以上js原始类型不可存
Object
存储 可调用Object方法的类型
快捷记忆:除null、undefined外的
any
可以赋值给任意类型,但应该避免使用,可当成一种逃生方式
let a: any
let b: string
a = false
b = a
console.log(b) // false
unknown
未知类型,但不能直接分配而破坏其他类型,可以先判断或者使用断言
// 断言
let a: unknown
a = 'hello'
let b: string
// 方式一
b = a as string
// 方式二
b = <string>a
never
不会有值
void
空,undefined
tuple
元组,可精确描述的数组
1.数组类型
2.固定数量,?表示可选
3.每个元素类型已知
let arr1: [string, number]
let arr2: [string, number?]
let arr3: [string, ...number[]] // string后紧跟0个及以上数量的数值
enum
定义一组命名常量
数字枚举
成员值是数值,会自动递增,且可反向映射
enum Direction {
Up, // 0
Down,
Left,
Right
}
// Direction[0]
// Direction.Up 更建议,清晰
function walk(dir: Direction) {
}
walk(Direction.Up)
字符串枚举
成员值是字符串,无反向映射
enum Direction {
Up: 'up',
Down: 'down',
Left: 'left',
Right: 'right'
}
// Direction.Up 只能这么写
function walk(dir: Direction) {
}
walk(Direction.Up)
常量枚举
使用const定义,编译时内联,减少生成js代码量
const enum Direction {
Up,
Down,
Left,
Right
}
type
为任意类型创建别名
type Status = number | string;
type Gender = '男' | '女';
type Classroom = {
grade: number
no: number
}
type Human = {
name: string
gender: Gender
}
type Student = Human & Classroom
const stu: Student = {
name: '小明',
gender: '男',
grade: 2,
no: 3,
}
操作
1.npm i -g typescript
2.编写一个ts文件
3.tsc 文件
4.node 文件