Allen's blog Allen's blog
首页
面经
算法 (opens new window)
分类

Allen

前端CV工程师
首页
面经
算法 (opens new window)
分类
  • Javascript

  • TypeScript

    • TS中的类型
      • any 和 unknown
      • void 空值
      • never 没有值
      • object 表示一个 js 对象
        • 函数结构的类型声明
      • array 数组
    • vue3标注类型
    • tsconfig
    • package.json导出类型
    • TS项目中ES模块依赖问题
  • CSS

  • Vue

  • React

  • 框架和构建工具

  • 工具库

  • 常见业务场景

  • Bug

  • 项目实战

  • 前端
  • TypeScript
Allen
2023-05-29
目录

TS中的类型

TS 中的类型有number、string、boolean、字面量、any、unknown、void、never、object、array、tuple、enum

# any 和 unknown

这两个类型的变量都可以被赋值任意值,但是any类型的变量可以再赋值给其他类型变量(失去类型检查),而unknown类型的变量不允许赋值给其他类型的变量(需要类型断言)

let x: any
x = 1
x = '2'
x = true

let y: unknown
y = 1
y = '2'
y = true

let s: string

s = x //不会报错
s = y //会报错

// 使用断言,断言有以下两种方式
s = y as string
s = <string>y
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

在代码编写过程中,尽量使用 unknown 类型,避免使用 any 类型,因为 any 会影响其他类型的变量的类型检测,同时也失去了使用 ts 的意义。

# void 空值

void 用在变量上的情况不多,主要用来设置函数返回值

void 表示没有返回值,此时函数返回除了 undefined 或 null 以外的其他值都会报错

# never 没有值

never 表示没有返回值,连空值都没有。

在 js 中有一些函数就是没有返回值的,连 undefined 都不会返回,他们是用来报错的

function fn(): never {
    throw new Error('报错了')
}
1
2
3

# object 表示一个 js 对象

不太实用,因为 js 中一切都是对象,object 类型就等于说是没有限制

在开发中,我们要限制对象,往往是想要限制对象内部的属性的类型

const b: {
    name: string
    age?: number
}
1
2
3
4

这里的 age 是可选的属性,当给 b 变量赋值的时候,可以有 age,也可以没有。

当只要求 b 对象里面有 number 属性,不限制是否有其他属性时就不能采用以上的可选属性,可以如下处理:

interface TreeNode {
    [propName: string]: any
    prop: TreeNode[]
}
function test(node: TreeNode, prop: string) {
    if (!node) return
    let myNode: TreeNode[] | TreeNode
    myNode = node
    while (!Array.isArray(myNode) && myNode[prop]) {
        if (Array.isArray(myNode[prop])) {
            myNode = myNode[prop][0]
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 函数结构的类型声明

语法:(形参:类型, 形参:类型, ...) => 返回值类型

# array 数组

const f = number[]

const g = Array

上次更新: 2023/12/16, 09:22:46
消除过多的if-else
vue3标注类型

← 消除过多的if-else vue3标注类型→

最近更新
01
rollup使用配置文件rollup.config.ts打包
12-08
02
package.json导出类型
12-08
03
关键问题方案
11-17
更多文章>
Theme by Vdoing | Copyright © 2023-2023 Allen | Github
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式