TypeScript 类型 类型别名 类型断言
JavaScript 数据类型
ECMAScript定义了8种数据类型
7种原始类型
Boolean
Null
Undefined
Number
BigInt(ES10)
String
Symbol
1种引用类型
Object
TypeScript 类型
需要注意的几个点
- unitypes联合类型 值可以是多个类型的其中之一
// 变量
let unitTypsVar: Number | String | Object;
unitTypsVar = {}
console.log(unitTypsVar)
// 指定数组元素类型
let typesArr : (number | string | Object) [] = [1,2,3,'4',{}]
- never类型
代表函数的终点无法被执行到
let fnNever: () => never = () => {
throw new Error('never')
}
function infiniteLoop(): never {
while (true) {
}
}
- 元组
元组Tuple 起源于函数式编程,指定数组类型和数组元素个数
let tuple : [string,number,object] = ['a',1,{}]
- 函数类型
定义函数类型,首先定义形参列表,然后用=>定义函数返回值类型
let sumCust: (x: number, y?: number) => number;
sumCust = function sum(x: number, y?: number) {
typeof y === "number" && (x += y)
return x
}
类型别名
使用type来定义类型别名,方便简化代码,方便类型复用
function sum(x: number, y: number): number {
return x + y
}
// 抽取类型
type sumType = (a: number, b: number) => number
// 复用
const sum2: sumType = sum
sum2(1, 2)
类型断言
有时候我们需要在还不确定类型的时候访问类型的属性和方法,但这个时候编译器往往会报错
类型断言就是告诉编译器,你比它更了解这个类型,而且它不应该因此而发生错误
// 类型断言
type inputType = string | number;
function getLength(input: inputType): number {
return (input as string).length ? (input as string).length : (input as number).toString().length
// 另一种断言写法
// return (<string>input).length ? (<string>input).length : (<number>input).toString().length
}
getLength('a')
getLength(123)