TS--从0开始(二、TS类型基础)

TS类型

一、基础类型

1.数字 number

let num: number = 56

2.字符串 string

let str: string = '字符串'

3.布尔值 boolean

let isOk: boolean = true

TS--从0开始(二、TS类型基础)

二、空和未定义

注意:这两种类型有且只有一个值,所以在标注一个变量为null或undefined时,就表示这个变量不能被修改了

1.空 null

let data1: null = null;

2.未定义 undefined

let data2: undefined = undefined;

默认情况下,null和undefined是其他所有类型的子类型,所以在其他类型复制时可以将null和undefined赋值给其他值

let data = '字符串'

data = '字符串2'

data = null

data = undefined

会产生问题,如图:
TS--从0开始(二、TS类型基础)
解决方法
在tsconfig.json文件中加上

"strictNullChecks": true

TS--从0开始(二、TS类型基础)
定义但未类型标注且未赋值则为any

三、对象

1.内置对象类型

let obj: Object = {}
let arr: Array<number> = [1, 2, 3]
let date: Date = new Date()

2.自定义对象类型

a.字面量标注(不利于复用)

let user: { name: string, age: number } = {
    name: '小可爱',
    age: 18
}

b.接口 (推荐)

interface People {
    name: string,
    age: number
}

let p1: People = {
    name: 'Tom',
    age: 18
}

let p2: People = {
    name: 'J',
    age: 16
}

接口不能作为数据使用,只是一种类型的管控

c.类与构造函数

class People {
    constructor(public name: string, public age: number) {

    }
}

let Person : People = new People('名字', 18)

四、数组类型

1.使用泛型标注类型

let arr: Array<number> = [1, 2, 3]
arr.push(177)//ok

arr.push('字符串')//err

TS--从0开始(二、TS类型基础)

2.简单标注

let arr:string[]=['字符串1','字符串2']
arr.push('字符串3')//ok

arr.push(89)//error

TS--从0开始(二、TS类型基础)

五、元组类型

元组类似数组,但是其中的类型不必完全相同

let data: [string, number] = ['字符串', 1]   //初始化时元素个数以及元素类型都必须与类型标注相同

data.push('字符串2')

六、枚举类型

给一组有关联的数据赋予一个友好的名字

// 数字型枚举定义
enum MEI_JU {
    MEI_JU_ONE = 100,
    MEI_JU_TWO = 200,
    MEI_JU_THREE,
}
// 使用
MEI_JU.MEI_JU_ONE;
// 若没有赋值  则默认从0开始   没有赋值的项为上一项    +1   (如此处的MEI_JU.MEI_JU_THREE为201)


// 字符串型枚举定义
enum MEI_JU_STRING {
    MEI_JU_ONE = '枚举字符串1',
    MEI_JU_TWO = '枚举字符串2',
    INDEX = 3,
}
// 使用
MEI_JU_STRING.MEI_JU_ONE;
// 注意:如果前一个枚举是字符串,则后面一个需要手动赋值

上面ts编译过后的JS为

// 数字型枚举定义
var MEI_JU;
(function (MEI_JU) {
    MEI_JU[MEI_JU["MEI_JU_ONE"] = 100] = "MEI_JU_ONE";
    MEI_JU[MEI_JU["MEI_JU_TWO"] = 200] = "MEI_JU_TWO";
    MEI_JU[MEI_JU["MEI_JU_THREE"] = 201] = "MEI_JU_THREE";
})(MEI_JU || (MEI_JU = {}));
// 使用
MEI_JU.MEI_JU_ONE;
// 若没有赋值  则默认从0开始   没有赋值的项为上一项    +1   (如此处的MEI_JU.MEI_JU_THREE为201)
// 字符串型枚举定义
var MEI_JU_STRING;
(function (MEI_JU_STRING) {
    MEI_JU_STRING["MEI_JU_ONE"] = "\u679A\u4E3E\u5B57\u7B26\u4E321";
    MEI_JU_STRING["MEI_JU_TWO"] = "\u679A\u4E3E\u5B57\u7B26\u4E322";
    MEI_JU_STRING[MEI_JU_STRING["INDEX"] = 3] = "INDEX";
})(MEI_JU_STRING || (MEI_JU_STRING = {}));
// 使用
MEI_JU_STRING.MEI_JU_ONE;
// 注意:如果前一个枚举是字符串,则后面一个需要手动赋值

意味着
可通过前者访问后者,也可通过后者访问前者

七、无值类型

常用于标注没有返回值的函数 void

function fun(): void {
    // return为空或者return undefined都为void   如果没有开启严格类型检车return null也为void
}

let res = fun()

八、NEVER类型

当一个函数永远都不可能执行return的时候,比如抛出了一个错误导致函数执行结束,或者陷入死循环

function fun(): never {
    throw new Error()
}

let a = fun()

九、任意类型

不确定时

  • 任何值都可以赋值给any
  • any可以赋值给任何值
  • any具有所有属性和方法

但是程序中不推荐使用any,可以在tsconfig.json中添加 “noImplicitAny”: true来检查程序中的隐式any

十、未知类型

unknow仅能赋值给unkonw和any,属于安全版的any,没有任何属性和方法

十一、函数类型

function fun(x: number, y: number): number {
    return x + y
}
上一篇:[POI2010]CHO-Hamsters


下一篇:UVA12297 Super Poker 矩阵快速幂