Skip to content

类型

数据类型关键字描述
任意类型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
voidvoid

用于标识方法返回值的类型,表示该方法没有返回值。

function hello(): void {
    alert("Hello Runoob");
}
nullnull

表示对象值缺失。

undefinedundefined

用于初始化变量为一个未定义的值

nevernever

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

请勿转载