ts-1-基础数据类型

107 阅读3分钟

ts-1-基础数据类型

1. 版本及配置

  • ts版本:Version 4.7.4
  • 生成 ts 的配置文件 保存ts的文件夹 在终端中打开 执行命令:tsc --init
  • 就可以看见ts的配置文件 tsconfig.json,以下代码都是基于 "strict": true, 的配置来测试的
  • 不作任何配置,默认 "strict": true
  • "strict": true // 开启所有严格的类型检查

2. 语法详解

  • let num: number = 12
  • num-变量名称
  • number-变量的类型,称之为类型注解
  • 12-变量的值

3. 基础数据类型

// 基础数据类型的声明
let num: number = 12
let num2: number = Number(13)

// 声明不赋值
let num3: number
console.log(num);
console.log(num2);

let str: string = 'ccc'
let str2: string = String('aaa')
console.log(str);
console.log(str2);

let bl: boolean = false
let bl2: boolean = Boolean(true)
console.log(bl);
console.log(bl2);

let u: undefined = undefined

//  开启:"strict": true;报错-不能将类型“undefined”分配给类型“null”,关闭则不会报错。
// let n: null = undefined  

let n2: null = null

//  开启:"strict": true;报错-不能将类型“null”分配给类型“undefined”,关闭则不会报错。
// let u2: undefined = null  

4. any 类型

  • any 类型可以接收任意类型的数据。
  • ts 中被声明为 any 类型的变量,是不会进行任何类型检查的,
  • 也就是说any类型的数据,可以执行任何形式的操作,这样可以很容易地编写类型正确但是执行异常的代码,因为没有经过类型检查。
let anyVar  // 声明时不指定类型,默认是any 类型。
let anyVar1: any = 'a'
anyVar1 = 1
anyVar1 = false
anyVar1 = []
anyVar1 = {}

5. unknown 类型

  • unknown 类型 --这个类型就是解决 any 类型的问题而来的类型。
  • any 类型可以接受任意类型的数据。
  • unknown 类型也可以接收任意类型的数据。
  • any 和 unknown 可以互相赋值。
let unknownVar1: unknown = 'cccc'
let anyVar2: any = unknownVar1

let anyVar3: any = 'asd'
anyVar3 = unknownVar1
  • any 与 unknown 的区别。
  • any类型是不做类型检查的。
  • 但是 unknown 是要做类型检测,所以 unknown 类型比 any 类型更加严格,安全。
let person: any = {
    uname: 'zrs',
    age: 12
}
console.log(person.uname);

let person2: unknown = {
    uname: 'zrs',
    age: 12
}

// 类型别名 提前用一下
type Obj = {
    uname: string,
    age: number
}

// 报错 对象的类型为 unknown
// unknown 类型的数据不允许任何操作,这也就是为什么unknown比any类型安全的原因。
// console.log(person2.uname);  

// 要操作 unknown 类型的数据,
// 需要我们自己执行操作,缩小类型的范围,告诉编译器这个数据的具体类型
// 这里使用类型断言 告诉编译器 这个 person2 是 Obj 这个类型的数据
console.log((person2 as Obj).uname);


6. void 类型

  • void 类型:表示没有任何类型,常用作函数的返回值
function func(): void {
    // return 1 // 报错 能将number 类型分配给 void 类型
}

let vVar: void = undefined
// let vVar2: void = null  // 不能将类型“null”分配给类型“void”,关闭 "strict": true,则不会报错

7. never 类型

  • never 类型:永远不会有值的一种类型
// 因为总是抛出异常,所以 error 将不会有返回值
function errorMsg(msg: string): never {
    throw new Error(msg);
}

// 因为存在死循环,所以 loop 将不会有返回值
function loop(): never {
    while (true) {
    }
}