TS中类型推论、类型别名和never类型

一、类型推论

  • TypeScript会在没有明确的指定类型的时候推测出一个类型,这就是类型推论

在这里插入图片描述
在这里插入图片描述

  • 如果没声明变量,没定义类型,也没赋值,这时候TS会推断成any类型可以进行任何操作
let str

str = 456

str = null

二、类型别名


  • type关键字(可以给一个类型定义一个名字)多用于复合类型

1. 定义类型别名

/* 定义类型别名 */
type str = string

let s:str = '我是小青'
console.log(s);

2. 定义函数别名

/* 定义函数别名 */
type str = () => string

let s: str = () => '我是小青'
console.log(s);

3. 定义联合类型别名

/* 定义联合类型别名 */
type str = string | number

let s1:str = 123
let s2: str = '123'

console.log(s1, s2);

4. 定义值的别名

// 定义值的别名
type value = boolean | 0 | '213'
 
//变量s的值  只能是上面value定义的值
let s:value = true
console.log(s);

5. type 和 interfaces的区别

  • interface使用extends继承,type使用&继承。
type s = number [] & B

interface A extends B {
    
    

} 
interface B {
    
    
}
  • type可以声明联合类型和元组类型,interface不行
type s = number[] | B

interface A extends B {
    
    
  name: string | number
}
interface B {
    
    
}
  • interface可以实现声明合并,而type不行
interface test {
    
    
  name: string
}

interface test {
    
    
  age: number
}

/*
  test实际为 {
    name: string
    age: number
  }
*/

6. type高级用法

在这里插入图片描述

  • extends有包含的意思,左边的值,会作为右边类型的子类型
type a1 = 1 extends number ? 1 : 0  //1
type a2 = 1 extends Number ? 1 : 0  //1
type a3 = 1 extends Object ? 1 : 0  //1
type a4 = 1 extends any ? 1 : 0     //1
type a5 = 1 extends unknown ? 1 : 0 //1
type a6 = 1 extends never ? 1 : 0   //0

三、never类型


1. never的使用

  • TypeScript将使用never类型来表示不应该存在的状态
type A = '唱' | '跳' | 'rap'

function kun (value:A){
    
    
  switch(value){
    
    
    case '唱': break
    case '跳': break
    case 'rap': break
    default:
      // 兜底逻辑
      const error: never =value;
      break
  }
}

2. never与void的差异

  • void类型只是没有返回值,但本身不会出错;nerve只会抛出异常没有返回值
//void类型只是没有返回值 但本身不会出错
function Void(): void {
    
    
  console.log();
}

//只会抛出异常没有返回值
function Never(): never {
    
    
  throw new Error('aaa')
}
  • 当我们鼠标移上去的时候会发现,只有void和number。never在联合类型中会被直接移除

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_58190023/article/details/129499969