主要有以下数据类型:
- 数字类型(number)
- 字符串类型(string)
- 数组类型(array)
- 布尔类型(boolean)
- 元组类型(tuple)
- 枚举类型(enum)
- 任意类型(any)
- void(无类型)
- null 和undefined
- never
- object
数字类型(number)
同JS,所有的数字都是浮点数(支持十进制和十六进制,还有ECMAScript 2015中引入的二进制和八进制字面量)let x: number = 6
字符串类型(string)
使用单双引号都行
还可以使用模板字符串(定义多行文本和内嵌表达式)使用反引号````包围,let name: string = "xxx"name = 'yyy' // 可行
${ xxx }形式嵌入let xxx: string = "hello"let yyy: string = `${xxx} world`let zzz: string = xxx + "world" // 等价于上面一句
数组类型(array)
两种方式定义
1. 元素类型后面加
[]let list: number[] = [1,2,3]
2.使用数组泛型,Array<元素类型>
let list: Array<number> = [1,2,3]
布尔类型(boolean)
true/falselet x: boolean = false | true
元组类型(tuple)
元组类型允许表示一个已知元素数量和类型的数组,各元素的类型不必相同
联合类型:let x: [string,number]x = ["hello",1] // OKx = ["hello","world"] // Error
let x: string | number// x为 string 或者 number 都是 OK 的
枚举类型(enum)
enum类型是对JavaScript标准数据类型的一个补充enum Status {success = 1, fail = -1} // 可以直接赋值,也可以不赋值let a: Status = a.success // 1
任意类型(any)
一般是为了防止报错(处理暂时不知道具体类型的数据)let x: any = "hello world"let y: any[] = [1,"yyy",true] // OK
void(不表示任何类型)
一般用在函数没有返回值时,其返回值的类型
只能为它赋予undefined和nulllet x: void = undefined// 普通函数function x(): void {}// 返回值为number的函数function xx(x:number,y: number): number {return x+y}// 箭头函数声明类型let yyy: (x:string)=>void = (x) => {console.log(x)}
null 和undefined
默认情况下null和undefined是所有类型的子类型,用到的情况可能是联合类型let x: number | undefined // 表示x可以不存在let x?: number // 等价于上面的,?表示可以不存在
never
never类型表示的是那些永不存在的值的类型never类型是那些总是会抛出异常或根本就不会有返回值的函数表达式或箭头函数表达式的返回值类型;- 变量也可能是
never类型,当它们被永不为真的类型保护所约束时。
never类型是任何类型的子类型- 没有类型可以赋值给
never,any也不行(只有never可以赋值给never) ```typescript // 返回never的函数必须存在无法到达的终点 function error(message: string): never{ throw new Error(message) }
function xxx(): never { while (true) { } }
// 推断的返回值类型为never function fail() { return error(“failed”); }
<a name="jB5ms"></a>## object(非原始类型)除`number,string,boolean,symbol,null或undefined`之外的类型```typescriptfunction fun(x: object | null): voidfun({xxx: "xxx"}) // OKfun(null) // OKfun(true) // Error
类型断言
1.尖括号语法
let foo: anylet xxx = <string>foo // 此时foo类型为string
2.as 语法(在JSX语法里只能使用这种,尖括号可能会造成歧义)
let xxx = foo as string//双重类型断言//'Event' 和 'HTMLElement' 中的任何一个都不能赋值给另外一个,所以先将其断言为anyfunction handler(event: Event) {const element = (event as any) as HTMLElement; // ok}
参考资料:
TypeScript文档
