TS中any与unkonow与never类型都是什么

本文介绍了TypeScript中的三种特殊类型:any用于无约束的任意类型,unknown用于未知但安全的类型,never表示不存在的值。讲解了它们的用法、特性及应用场景,提供了实例对比和注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(一)any
这应该是 typescript 中最开始就会接触到的类型,顾名思义:任意类型,这也是 ts 中不写类型申明时的默认类型,即不作任何约束,编译时会跳过对其的类型检查,

let a1: any;
a1 = 'abc';
a1 = 123;
a1 = true;

const arr: any[] = [123, 'abc', true, null];

(二)unknown
unknown 表示未知类型,是 typescript 3.0 中引入的新类型,即写代码的时候还不清楚会得到怎样的数据类型,如服务器接口返回的数据,JSON.parse() 返回的结果等;该类型相当于 any,可以理解为官网指定的替代 any 类型的安全版本(因为不提倡直接使用 any 类型);

它能被赋值为任何类型,但不能被赋值给除了 any 和 unknown 之外的其他类型,同时,不允许执行 unknown 类型变量的方法(any 可以),举个例子:

let uk: unknown = 'abc';

uk = 1;
uk = true;
uk.toString(); // Error

let valAny: any = 'abc';
valAny.toString(); // 'abc'

let uk1: unknown = uk;
let uk2: any = uk; // Error
let uk2: string = uk; // Error

(三) never
never 表示永不存在的值的类型,是 typescript 2.0 中引入的新类型。
什么情况下变量会永远不存在值呢?通常情况下,变量一旦申明了,就会被分配值,即使没有特别指定,也会被初始化为 undefined,同样一个函数即使有个写返回值,也会默认返回 undefined,也不是真正的不存在返回值:

1、其实确实有一些情形,值会永不存在,比如,从程序运行的维度讲,如果一个函数执行时抛出了异常,那么这个函数变永远不会有值了(因为抛出异常会直接中断程序运行,因此程序就不会运行到返回值那一步了,即具有不可达的终点,也就永不存在返回)
例:

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

// 有机会到达终点的函数也算存在返回值,编译会报错
function err(): never {
    if (Math.random() > 0.5) {
        throw new Error('message');
    }
}

2、还有一种极端情况,函数中执行无限循环的代码,这样也同样使得程序永远无法运行到函数返回值那一步,就不存在返回:

function loopForever(): never {
    while (1) {}
}

3、变量也可以直接申明为 never 类型,让它永不存在值,其实就是意思就是永远不能给它赋值,否则就会报错,这样就可以形成一种保护机制;

let ne: never;
ne = 123; // Error

4、never 是所有类型的子类型,意思就是它可以赋值给任何类型(前提是配置里 “strictNullChecks”: false,否则检查不通过);
*/

let num: number = 1;
let ne: never;
num = ne;

5、 同时也没有任何类型是 never 的子类型,除了 never 自身,即除了 never 任何类型都不能赋值给 never 类型的变量(如果前提是 “strictNullChecks”: true,never 也不能赋值给 never);

let n1: never;
let n2: never;
n1 = n2;

// any 也不能分配给 never
let any1: any = 123; 
n1 = any1; // Error
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值