类型
数据类型 | 关键字 | 描述 |
---|---|---|
任意类型 | any | 声明为 any 的变量可以赋予任意类型的值。 |
数字类型 | number | 双精度 64 位浮点值。它可以用来表示整数和分数。 let binaryLiteral: number = 0b1010; // 二进制 let octalLiteral: number = 0o744; // 八进制 let decLiteral: number = 6; // 十进制 let hexLiteral: number = 0xf00d; // 十六进制 |
字符串类型 | string | 一个字符系列,使用单引号(')或双引号(")来表示字符串类型。反引号(`)来定义多行文本和内嵌表达式。 let name: string = "Runoob"; let years: number = 5; let words: string = `您好,今年是 ${ name } 发布 ${ years + 1} 周年`; |
布尔类型 | boolean | 表示逻辑值:true 和 false。 let flag: boolean = true; |
数组类型 | 无 | 声明变量为数组。 // 在元素类型后面加上[] let arr: number[] = [1, 2];// 或者使用数组泛型 let arr: Array<number> = [1, 2]; |
元组 | 无 | 元组类型用来表示已知元素数量和类型的数组,各元素的类型不必相同,对应位置的类型需要相同。 let x: [string, number]; x = ['Runoob', 1]; // 运行正常 x = [1, 'Runoob']; // 报错 console.log(x[0]); // 输出 Runoob |
枚举 | enum | 枚举类型用于定义数值集合。 enum Color {Red, Green, Blue}; let c: Color = Color.Blue; console.log(c); // 输出 2 |
void | void | 用于标识方法返回值的类型,表示该方法没有返回值。 function hello(): void { alert("Hello Runoob"); } |
null | null | 表示对象值缺失。 |
undefined | undefined | 用于初始化变量为一个未定义的值 |
never | never | never 是其它类型(包括 null 和 undefined)的子类型,代表从不会出现的值。 |
代码示例一
typescript
let a = false
a = true
// 下行报错
// a = 1
// 参数和返回值有类型
function sum(a: number, b: number) :number{
return a + b
}
console.log(sum(2,3))
代码示例二
typescript
// 可以使用字面量来声明类型
let a: 10
a = 10
// 下行报错,a只能为10
// a = 11
// 可以使用 | 连接多个类型(联合类型)
let b: "male" | "female"
b = "male"
b = "female"
let c: boolean | string
c = true
c = "hello"
// any 是任意类型,变量的类型设置为any后相当于关闭了对该变量的类型检测
let d: any
// 如果声明变量不指定类型,,则自动判断为any类型
let e
// any类型的变量可以直接赋值给任意变量
c = d
// unknown 类型实际上是一个类型安全的any,不能直接赋值给其他变量
let f: unknown
let g: string
// 报错 ,unknown类型不能直接赋值给其他变量
// g=f
//判断类型后可以赋值
if (typeof f === "string") {
g = f
}
// ts的类型断言
let h = f as string
let i = <string>e
// void表示空,函数的返回值为void就表示没有返回值
function fn():void {
// 可以return null或者return undefined或者不写return
return null
}
// never,永远不会返回,类似Kotlin的Nothing
function f1():never {
throw new Error("错错错")
}
代码示例三
typescript
// object表示js对象
let a: object
a = {}
a = function () {
}
/*
{}用来制定对象中可以包含哪些属性
语法:{属性名:属性类型,属性名:属性类型}
在属性名后面加上? 表示属性是可选的
*/
let b: { name: string, age?: number }
b = {name: "孙悟空", age: 18}
// [propName: string]: any 表示任意类型的属性
let c: { name: string, [propName: string]: any }
c = {name: "猪八戒", age: 10, gender: "男"}
// 设置函数结构的类型声明
let d: (a: number, b: number) => number
// string[]表示字符串数组
let e: string[]
e = ['a', 'b', 'c']
// number[]表示数值数组
let f: number[]
// 另一种表示数组的方式
let g: Array<number>
g = [1, 2, 3]
// 元组就是固定长度的数组
let h: [string, number]
h = ['hello', 123]
// 枚举
enum Gender {
Male = 0,
Female = 1
}
let i: { name: string, gender: Gender }
i = {
name: "孙悟空",
gender: Gender.Male
}
console.log(i.gender === Gender.Male)
// & 表示同时
let j: { name: string } & { age: number }
j = {name: "孙悟空", age: 18}
// | 表示或
let k: { name: string } | { age: number }
k = {name: "张三"}
k = {age: 17}
// 下行报错
// k={gender:1}
// 类型别名
type myType = string
let l: myType
type myType1 = 1 | 2 | 3 | 4 | 5
let m: myType1
m = 3