作为一个小职员,工作多,没提成,人家休假我加班。房贷没还清,保险自己买。不过好在我不用交停车费,因为我根本买不起车。2020年小编决定好好的学习Typescript,提升个人能力,努力赚小钱钱,争取买到一辆自行车(呸,要啥自行车!!!!)。这是小编写的第二篇Typescript学习的文章。
在 基础类型(一) 中我们说了js中的基本类型在ts中对应的类型,除了那其中类型外,在ts中还有基本特殊的类型。
任意值
任意值any表示不受类型系统的限制,可以被赋予任何类型的值
// 声明字符类型
let str: string = 'string'
// 赋值其他类型的值 报错 Type '123' is not assignable to type 'string'.
str = 123
// 给any类型的变量赋值字符
let anyValue: any = '字符'
// 再修改值为数字也是可以的
anyValue = 123
任意值不仅可以被任意赋值,也可以被调用任何属性或者方法
let arr: any = 12345
// 实际数值没有split方法,调用会出错,但是any类型不做类型检查,所以调用时没有提示语法错误
let spllit: any = arr.split(',')
在实际项目中,any一般在不知道值的类型的时候使用。在项目中应避免将typescript使用成anyscript, 使用typescript更多的就是利用它自身类型系统的优势。
unknown
在ts3.0新引入了一个新的类型unknown, unknown与any一样,任何类型都可以赋值给unknown
let unknownValue: unknown = 'string'
unknownValue = 123
但与any不同的是,如果没有给unknown明确指定类型,无法对unknown做任何操作
let value: unknown = 'string'
// 报错 Object is of type 'unknown'
const val1: unknown = value.toLocaleLowerCase()
// 正确 在ts中可以通过 as 为变量指定类型
const val2: string = (value as string).toLocaleLowerCase()
// 也可以使用<string>value的方式自定类型,在React中不支持
const val3: string = (<string>value).toLocaleLowerCase()
建议对于未知类型的情况下优先使用unknown
void
对于熟悉java的同学来说,void是特别常用的一个类型,表示没有任何返回值
public static void main(String args []){
System.out.println('输出字符串');
}
在ts中,void的作用基本和java是一致的,如果一个函数或者方法没有返回值,那么它的返回值就是void
function method(): void {
console.log('没有任何返回值')
}
如果给一个变量指定类型为void,那么这个变量的值只能是undefined或null
let void1: void = undefined
let void2: void = null
// 报错 Type '123' is not assignable to type 'void'.
let void3: void =123
never
void代表没有返回值,而never类型表示的是永不存在的值的类型,使用never常用的场景包括
- 函数抛出异常
- 函数内部出现死循环
// 抛出异常
function error(message: string): never{
throw new Error(message)
}
// 死循环
function map():never {
while(true) {}
}
如果将一个变量指定类型为never,那么这个变量只能赋值never类型的值
function error(message: string): never{
throw new Error(message)
}
let never1: never = error('异常信息')
// 报错 Type '1' is not assignable to type 'never'
let never2: never = 1
// 报错 Type 'null' is not assignable to type 'never'
let never3: never = null
// 报错 Type 'undefined' is not assignable to type 'never'.
let never4: never = undefined
// 报错 Type 'any' is not assignable to type 'never'
const anyValue: any = 1
let never5: never = anyValue