TypeScript 中 any、unknown、never 和 void 有什么区别?

news/2024/11/8 9:09:22/

一 unknown: 未知类型

unknown: 未知类型是typescript 3.0 中引入的新类型。

1.1 所有类型的字面量都可以分配给unknown类型

unknown未知类型,代表变量类型未知,也就是可能为任意类型,所以, 所有类型的字面量都可以分配给unknown类型。
这里声明一个unknown的变量,先后为其赋值字符串、数字和对象类型的字面量取值,都可以成功赋值。

let notSure: unknown = 'sisterAn!'// 可以被赋值任意类型
notSure = 'sisterAn!'
notSure = 512
notSure = { hello: () => 'Hello sisterAn!' }

1.2 unknown 类型不允许给 any 或 unknown 以外的变量赋值

unknown 未知变量,既然类型未知,也就无法赋值给具体的某个类型,unknown 未知变量不允许给 any 或 unknown 以外的变量赋值。

两个未知变量之间可以相互赋值。

let notSure: unknown = 2
let notSure1: unknown = 'Hello'notSure = notSure1

未知变量和any变量可以相互赋值。

let notSure: unknown = 2
let any1: any = 12notSure = any1
any1 = notSure

未知变量不可以为其他变量赋值

let notSure: unknown = 2
let num: number = 12notSure = num
any1 = notSure
num = notSure // error: Type 'unknown' is not assignable to type 'number'.

1.3 unknown 类型变量不可以执行具体类型的方法

unknown 类型变量不可以执行具体类型的方法,即使它真的是这个类型,除非你使用断言。

let notSure: unknown = 'sisterAn'
let num: number = 12
notSure = num
notSure.toLowerCase()
// error: Object is of type 'unknown'.

二 never:永不存在的值

never类型表示的是那些永不存在的值的类型。

2.1 never:执行中断的函数返回值类型

never通常用来指由于种种原因,函数没有执行到最后,导致不存在返回值的返回值
类型。
示例一:抛出异常会直接中断程序运行,这样程序就运行不到返回值那一步了,即具有不可达的终点,也就永不存在返回了

function error(msg: string): never {throw new Error(msg);
} 

**示例二:死循环,同样程序永远无法运行到函数返回值那一步,即永不存在返回。

function loopForever(): never {while (true) {};
}

2.2 never可以赋值给任何类型,但是不能被赋值

never类型是任何类型的子类型,也可以赋值给任何类型;然而,没有类型是never的子类型或可以赋值给never类型(除了never本身之外)。 即使 any也不可以赋值给never。

三 void:函数无返回值

函数则无返回值或者返回 undefined。

function a(): number { // ERROR: 其声明类型不为 "void" 或 "any" 的函数必须返回值console.log(123)
}
function a(): void {console.log(123)
}

你只能为它赋予undefined和null。

let a: void = 1 // ERROR: 不能将类型“number”分配给类型“void”
let a: void = undefined

四 any:在编译时可选择地包含或移除类型检查

any实际上是跳过类型检查的过程,所以允许你给它赋任意值,也可以调用任意的方法。
相比较来说,Object类型的变量只是允许你给它赋任意值 - 但是却不能够在它上面调用任意的方法。


http://www.ppmy.cn/news/768884.html

相关文章

​LeetCode解法汇总2178. 拆分成最多数目的正偶数之和

目录链接: 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目: https://github.com/September26/java-algorithms 原题链接:力扣 描述: 给你一个整数 finalSum 。请你将它拆分成若干个 互不相同 的正偶数之和&#xf…

JVM内存分配(JDK8)

以一个Math类为列,从JVM运行时内存结构,到内存分配流程,最后内存分配参数的含义,串起整个流程。文章还待后续完善。 public class Math {public static final int initData 666;public int compute(){int a 1;int b 2;int c …

【数据结构导论】第 4 章:树和二叉树

目录 一、树的基本概念 (1)树的定义 (2)树的逻辑表示 (3)树的相关术语 (4)树的基本运算 二、二叉树 (1)二叉树的基本概念 ① 定义 ② 特点 ③ 二叉…

# TSWIKI 0.2 版本

TSWIKI 0.2 版本 TSWIKI 0.2 版本经过这段时间的改进,增加了搜索,版本变更查看等功能,基本开发完成。功能方面已经与 gollum 类似。 功能改进说明 1、GIT 版本变更查看功能 实现 git 版本变更查看功能, 在 markdown 文档查看界面&#xf…

韩国Apple ID17+ 18+认证教程

很多朋友在玩DNF、地下城与勇士18的时候会发现普通的韩国Apple ID玩不了,需要年龄认证在18以上的Apple ID才可以玩,这个时候我们的账户就需要去做一个认证,或者直接买一个已经认证好的Apple ID账号,不然想玩这些是不行的。 认证17…

Cleanmymac X绿色中文苹果系统清理软件

随着时间的流逝,保持Mac处于最佳状态可能会很困难,因为各种杂物和数字碎片开始在您的系统中驻留。值得庆幸的是,有许多工具可以纠正这一问题,并让你的iMac或MacBook再一次恢复正常。Cleanmymac X很好用,之前就一直使用…

zabbix监控(4)

zabbix监控(4) 一、Zabbix 监控 Windows 系统二、Zabbix 监控 java 应用三、Zabbix 监控 SNMP 一、Zabbix 监控 Windows 系统 1、下载 Windows 客户端 Zabbix agent 2 https://cdn.zabbix.com/zabbix/binaries/stable/6.0/6.0.13/zabbix_agent2-6.0.13-…

Word中如何删除分隔符?

使用word时,我们可能会遇到要从某一页开始加页码 这时候 大家会使用 “分隔符”->“下一页",再插入页码 但是 有事一不小心点错了初始页面? 这时 就要删除“”分割符“” 但是 菜单里面没有 怎么搞? “试图”-&…