🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
在基础类型(一)中我们说了js中的基本类型在ts中对应的类型,除了那其中类型外,在ts中还有基本特殊的类型。 ### **任意值** 任意值`any`表示不受类型系统的限制,可以被赋予任何类型的值 ```javascript // 声明字符类型 let str: string = 'string' // 赋值其他类型的值 报错 Type '123' is not assignable to type 'string'. str = 123 // 给any类型的变量赋值字符 let anyValue: any = '字符' // 再修改值为数字也是可以的 anyValue = 123 ``` 任意值不仅可以被任意赋值,也可以被调用任何属性或者方法 ```javascript let arr: any = 12345 // 实际数值没有split方法,调用会出错,但是any类型不做类型检查,所以调用时没有提示语法错误 let spllit: any = arr.split(',') ``` 在实际项目中,`any`一般在不知道值的类型的时候使用。在项目中应避免将typescript使用成anyscript, 使用typescript更多的就是利用它自身类型系统的优势。 ### **unknown** 在ts3.0新引入了一个新的类型`unknown`, `unknown`与`any`一样,任何类型都可以赋值给`unknown` ```javascript let unknownValue: unknown = 'string' unknownValue = 123 ``` 但与`any`不同的是,如果没有给`unknown`明确指定类型,无法对`unknown`做任何操作 ```javascript 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`是特别常用的一个类型,表示没有任何返回值 ```java public static void main(String args []){         System.out.println('输出字符串');     } ``` 在ts中,`void`的作用基本和java是一致的,如果一个函数或者方法没有返回值,那么它的返回值就是void ```javascript function method(): void { console.log('没有任何返回值') } ``` 如果给一个变量指定类型为`void`,那么这个变量的值只能是`undefined`或`null` ```javascript let void1: void = undefined let void2: void = null // 报错 Type '123' is not assignable to type 'void'. let void3: void =123 ``` ### **never** `void`代表没有返回值,而`never`类型表示的是永不存在的值的类型,使用never常用的场景包括 * 函数抛出异常 * 函数内部出现死循环 ```javascript // 抛出异常 function error(message: string): never{ throw new Error(message) } // 死循环 function map():never { while(true) {} } ``` 如果将一个变量指定类型为`never`,那么这个变量只能赋值`never`类型的值 ```javascript 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 ```