Typescript any 和 unknown

在 TypeScript 中,anyunknown 类型的变量都可以接受任何类型的值,但它们在使用和赋值时有不同的规则和限制。以下是详细的说明:

any 类型

any 类型是 TypeScript 中最宽松的类型,它可以接受任何类型的值,并且不会进行类型检查。这意味着你可以对 any 类型的变量进行任何操作,而 TypeScript 不会报错。

赋值
  • any 类型的变量可以赋值为任何类型的值。
  • any 类型的变量可以赋值给其他类型的变量。
let anyVar: any = 10;
anyVar = "Hello"; // 可以赋值为字符串
anyVar = true; // 可以赋值为布尔值

let str: string = anyVar; // 可以将 any 类型的变量赋值给 string 类型的变量
let num: number = anyVar; // 可以将 any 类型的变量赋值给 number 类型的变量
使用
  • any 类型的变量可以访问任何属性和方法,即使这些属性和方法实际上并不存在。
anyVar.someMethod(); // 不会报错,即使 someMethod 不存在
anyVar.someProperty; // 不会报错,即使 someProperty 不存在

unknown 类型

unknown 类型是 TypeScript 3.0 引入的一种更安全的类型。它可以接受任何类型的值,但在使用之前必须进行 类型断言类型缩小

赋值
  • unknown 类型的变量可以赋值为任何类型的值。
  • unknown 类型的变量只能赋值给 anyunknown 类型的变量。
let unknownVar: unknown = 10;
unknownVar = "Hello"; // 可以赋值为字符串
unknownVar = true; // 可以赋值为布尔值

let str: string = unknownVar; // 报错,不能将 unknown 类型的变量赋值给 string 类型的变量
let num: number = unknownVar; // 报错,不能将 unknown 类型的变量赋值给 number 类型的变量

let anyVar: any = unknownVar; // 可以将 unknown 类型的变量赋值给 any 类型的变量
let anotherUnknownVar: unknown = unknownVar; // 可以将 unknown 类型的变量赋值给 unknown 类型的变量
使用
  • unknown 类型的变量不能直接访问属性和方法,需要进行类型断言类型缩小后才能访问。
// 类型断言
let strVar = unknownVar as string; // 将 unknown 类型的变量断言为 string 类型
strVar.toUpperCase(); // 可以访问 string 类型的方法

// 类型缩小
if (typeof unknownVar === "string") {
    unknownVar.toUpperCase(); // 在类型缩小后可以访问 string 类型的方法
}

总结

  • any 类型:可以接受任何类型的值,可以赋值给其他类型的变量,可以访问任何属性和方法,不会进行类型检查。
  • unknown 类型:可以接受任何类型的值,只能赋值给 anyunknown 类型的变量,不能直接访问属性和方法,需要进行类型断言或类型缩小后才能使用。

在实际开发中,建议尽量使用 unknown 类型而不是 any 类型,以确保代码的类型安全性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值