变量后面带上相关的数据类型
const message: string = '我'
即便不显示的声明变量的类型,当你赋予变量初始值时,ts
也会给我们隐式的加上。
let foo: number = 123
foo = 222
进制
let foo: boolean = false
foo = true
let foo: string = 'hello ts'
foo = 'hello tss'
数组里面需要声明里面存放的数据类型
// 字符串型数组
const strArr:string[] = []
待补充…
const nu: null = null
const und: undefined = undefined
待补充…
数据类型是任意的
let message: any = 1
message = '2'
message = {}
不确定变量的类型
function foo() {
return 123
}
function bar() {
return '123'
}
let result: unknown
let flag = true
if(flag) {
result = foo()
} else {
result = bar()
}
any
比较灵活,当一个函数期望你传入一个具体的类型时,你传any
类型依旧是可以的,但是传unknown
就是不行的了,unkonwn
类型表示你不确定这个数据的类型,但是这个类型ts
不希望你乱赋值给别的变量,但是any
是可以的
never 类型表示的是那些永不存在的值的类型。
在声明数组时给予数组中各个元素指定的类型,赋予初始值时需要指定长度,但后续可以push
和pop
,push
也只能push
之前声明的类型
const turple: [number, string] = [1, 'string'];
turple.pop()
console.log(turple);
函数也是有类型的,个人理解:函数的类型就是你在定义你的函数的时候它的格式
// 期望num1是数字,num2是数字, 函数的返回值是number
// 实际开发中函数的返回类型可以不写,让其自己推导
function sum(num1: number, num2: number): number {
return num1 + num2
}
sum(2,3)
// ----------------------------
type FunType = (num1: number, num2: number) => number
const add: FunType = (num1: number, num2: number) => num1 + num2
console.log(add(4, 3))
function printPoint(point: { x: number, y: number }) {
console.log(point)
}
printPoint({x: 1, y: 2})
若要属性可选,加个?就行
function printPoint(point: { x: number, y: number, z?: number }) {
console.log(point)
}
printPoint({x: 1, y: 2})
设定的变量可以有多个类型,但此时对于变量的操作要额外小心,因为你不知道你能拿到你设定的变量它是一个什么样类型的值
function printId(id: string | number) {
console.log(id)
}
使用type
关键字给类型起别名
type Point = { x: number, y: number }
function printPoint(point: Point) {
console.log(point);
}
printPoint({ x: 1, y: 2 })
字面量类型跟枚举类型有点像,一般跟联合类型结合使用
// aligin只能取'left' | 'center' | 'right'中的一个
type AlignMent = 'left' | 'center' | 'right'
let align: AlignMent = 'algin'
枚举类只能在限定的几个key
值取值,一般key
值大写,枚举类型可读性强
enum Direction {
Left,
Right,
Up,
Down
}
function handleDirection(direction: Direction) {
switch (direction) {
case Direction.Left:
console.log("Go left");
break;
case Direction.Right:
console.log("Go right");
break;
case Direction.Up:
console.log("Go up");
break;
case Direction.Down:
console.log("Go down");
break;
default:
const exhaustiveCheck: never = direction;
}
}