本书未发布
数据类型
常见数据类型
let is:boolean = true
let age:number = 10
let name:string = 'xiaoming'
let arr1:number[] = [1,2,3]
let arr2: Array<number> = [4,5,6]
对象
类型声明
// 一般不常用 let a: object // 指定对象中拥有哪些属性 let b: {name: string} // let b = {name: '123',age:123} 报错
单个可选属性
let b: {name: string, age?: number} b = {name: '123'} b = {name: '123', age:123}
多个可选属性
// [propName: string] 表示的是属性名是字符串类型的, propName 可以是其他的任意名字 // [propName: string]: any 表示的是字符串类型的属性名, 任意类型的属性值 let b: {name: string, [propName: string]: any} let b = {name: '12', age: 123, gender: '男'} // let b = {age: 123, gender: '男'} 没有 name 属性, 报错
元组
let info: [string, number] = ['xiaoming', 12]
// push 的时候, 只能 push 上面规定的两种数据类型, 比如 info.push(true) 就会报错
b.push('xiaobai')
枚举
普通枚举
enum Gender{
GRIL,
BOY
}
console.log(Gender[0]) // GRIL
console.log(Gender[1]) // BOY
console.log(Gender['GRIL']) // 0
console.log(Gender['BOY']) // 1
常量枚举
const enum Colors{
RED,
YELLOW,
BLUE
}
let colors = [Colors.RED, Colors.YELLOW, Colors.BLUE]
console.log(colors) // [0, 1, 2]
任意类型
! 表示非空断言
let root1:any = document.getElementById('app') let root2:HTMLElement = document.getElementById('app') root!.style.color = 'red'
null, undefined
这两种类型是其他类型的子类型
let x:number x = 1 x = undefined x = null // 上面的情况, 如果开启了严格模式, 则不能将 x 赋值给 undefined 或者 null let y: number|null|undefined y = 1 y = null y = undefined
never
- 表示不会出现的值
作为没有返回值的函数的类型
function error():never { throw new Error('error') } function loop():never { while(true) { ... } }
2.
function fn(x:number|string) {
if(typeof x === 'number'){
console.log(x)
} else if(typeof x === 'string') {
console.log(x)
} else {
console.log(x) // 此时 x 的类型是 never
}
}
void
表示一个函数没有返回值, 没有任何类型
函数没有返回值, 那么就是 void 类型
function fn():void { }
void 和 never 的区别
- void 可以被赋值为 null 或者 undefined, never 不能是任何类型
- 返回 void 的函数可以正常执行, 返回 never 的函数不能正常执行
unknown 类型
unknown
类型的变量不能随意赋值给其他变量,如果想要赋值,需要特殊处理当变量类型不确定的时候,尽量不要使用
any
, 要使用unknown
let a: unknown a = 1 a = '2' a = true let b: string // b = a 这样写会报错, 如果想要赋值, 可以选取下面两种方式 // 第一种 if (typeof a === 'string') { b = a } // 第二种: 类型断言, 以下两种写法都可以 b = a as string b = <string>a