6.any 和 unknown
-- 未经授权禁止转载 --
/*
    any
        当需要快速编写代码, 而不关心类型检查时, 可以使用 any 类型

    unknown
        当你从外部源(如 API 请求、用户输入等)接收数据时, 数据的类型通常是不确定的,
        使用 unknown 类型可以确保在使用这些数据之前进行了适当的类型检查
*/

//--- any 可以存储任意类型的值 (类型不安全)
//当声明一个变量为 any 类型时, 编译器不会进行类型检查
let url: any = "dengruicode.com"
console.log(url.toUpperCase()) //toUpperCase 将字符串中的所有小写字母转换为大写字母

//错误示例: 字符串没有 toFixed 方法, 由于是 any 类型, 编译时不会报错, 但运行时会出错
//console.log(url.toFixed(2)) //toFixed 将数字格式化为字符串, 并保留指定的小数位数

//--- unknown 表示一个未知的类型 (类型安全)
//当声明一个变量为 unknown 类型时, 在使用之前需进行类型检查或断言明确其类型
let web: unknown = "www.dengruicode.com"

//错误示例: 编译器不知道 web 是否具有 toUpperCase 方法
//console.log(web.toUpperCase()) //编译报错

//console.log(typeof web) //typeof 用于获取一个变量或表达式的类型
if (typeof web === 'string') {
    //此时确定了 web 是 string 类型, 可以调用 toUpperCase() 方法
    console.log(web.toUpperCase())
}

//类型断言 告诉编译器一个变量的具体类型, 从而绕过编译器的类型检查
//web as string 将 web 变量断言为 string 类型
//告诉编译器: "我确定 web 是一个字符串类型的变量, 请按照字符串来处理"
console.log((web as string).toUpperCase())


  • 状态: 更新中
  • 作者: 邓瑞
  • 课时数量: 37 节课
更新中 ...