首页 > 其他分享 >TS学习笔记(二)

TS学习笔记(二)

时间:2024-10-03 23:34:10浏览次数:6  
标签:unknown never TS 笔记 学习 let 类型 报错 any

为了解决any类型的污染问题,引入了unkown类型、它与any类型的相似之处在于,所有类型的值都可以分配给unkown类型。

let x:unknown;

x = true; // 正确
x = 42; // 正确
x = 'Hello World'  // 正确

它们的不同之处在于:

1、unknown类型的变量,不能直接赋值给其它类型的变量(除了any类型和unknown类型)

let v:unknown = 123;

let v1:boolean = v  // 报错
let v2:number = v  // 报错

2. unkown类型的变量不能直接调用方法和属性

let v1:unknown = {foo:1}
v1.foo // 报错

let v2:unknown = 'hello'
v2.trim() // 报错

let v3:unknown = (n=0)=>n+1
v3() // 报错

如上,连直接当做函数执行也不行。

。。既然这样,那unknown的作用是什么呢?就是为了替代any类型,或者或,更严格的any类型。意思就是声明的变量可以是任何类型。但是又不能调用方法和属性,感觉没啥用。

迁移旧的项目,或者哪个变量想暂时关闭类型检查都可以用。

3. unknown类型变量能够进行的运算是有限的。加减乘除这些都不能进行。

let a:unknown = 1;

a + 1 // 报错
a === 1 // 正确

 

想要进行这些运算只有经过‘类型缩小’才可以

let a:unknown = 1;

if (typeof a === 'number') {
  let r = a + 10; // 正确
}

 

 

let s:unknown = 'hello';

if (typeof s === 'string') {
  s.length; // 经过类型缩小后,也可以使用字符串的方法了
}

 

 

二、never类型

never类型也称为“空类型”,及不包含任何值

let x:never;

 

给never类型的变量,赋给它任何值都会报错。

它的使用场景:

1. 在类型运算中,保证类型的完整性

2.不可能返回值的函数,返回值的类型就可以写成never。

 

never类型的一个重要特点是可以赋值给任意其他类型

let x:never;

let x1:string = x // 不报错
let x2:number = x  // 不报错
let x3:boolean = x  // 不报错

 

 

为什么never类型可以赋值给任意其他类型呢?这跟集合论有关,空集是任何集合的子集。TS规定,任何类型都包含了never类型

总之,TS有两个“顶层类型”(any和unknown),但是“底层类型”只有never唯一一个。

 

any 类型,unknown 类型,never 类型 - TypeScript 教程 - 网道 (wangdoc.com)

 

标签:unknown,never,TS,笔记,学习,let,类型,报错,any
From: https://www.cnblogs.com/yaoyu7/p/18446143

相关文章

  • 【VBA】シート数を取得する【Sheets.Countで取得できます】
    参考元:【VBA】シート数を取得する【Sheets.Countで取得できます】https://daitaideit.com/vba-sheet-count/「Sheets.Count」でシート数を取得SubTEST1()'シート数を取得Debug.PrintSheets.CountEndSubシート数を取得する場面シート数を取得できれば、次......
  • POJ3414-Pots
    继续刷邝斌飞搜索专题POJ3414可用平台这题拿到手就感觉很简单啊题意:俩容积为A和B的空罐子,给你三种操作,1:FILL(i)   (1≤ i ≤2),代表i从水龙头接满水2:DROP(i), i倒入下水道3:POUR(i,j),i给j倒,可能j 满了i 还有,也可能j 不满,但i 空了问你最少......
  • 讯飞星火编排创建智能体学习(四):网页读取
    目录引言网页读取节点如何生成网址测试引言在讯飞星火编排创建智能体学习(三):搜索工具-CSDN博客中,我介绍了如何用搜索工具从网上搜索车次信息。不过,在测试中我们也发现讯飞星火的这个工具并不是特别完善,它在整理搜索结果时可能会出现错误。所以,如果你确定某个网站可以获......
  • 强化学习:塑造奖励(Shaping reward)
    “塑造奖励”(Shapingreward)是一个主要用于行为心理学和强化学习领域的技术。它通过对目标行为或结果的逐步接近进行强化,逐渐通过奖励越来越接近目标的行为来“塑造”最终的行为。以下是塑造奖励常见的两个应用场景:行为心理学中:塑造用于训练动物或人类执行复杂行为。训练者不......
  • JavaWeb基础-学习笔记02
    02MySQL数据库、SQL、数据库设计、事务、JDBC1.MySQL数据库1.1MySQL的安装:包含两种安装方式,解压包安装、压缩包安装。通过解压包安装:下载压缩包后进行解压、添加my.ini初始化配置文件、添加环境变量;添加mysqld服务、启动该服务。期间遇到的一些问题和解决方案:找......
  • 从2023济南K学习滑动窗口中位数问题
    板子对顶堆template<classT>structDualHeap{Heap<T,std::greater<T>>small;//小根堆,里面存放大的值Heap<T,std::less<T>>big;//大根堆,里面存放前k小的值//中位数就是big.top()DualHeap(){}voidupdate(){if(b......
  • Creating, Reading and Writing(pandas学习一)
    开始入门要使用pandas库,通常从以下这行代码开始。importpandasaspd创建数据pandas中有两个核心对象:DataFrame(数据框)和Series(系列)。DataFrameDataFrame是一个表格。它包含一个单独条目的数组,每个条目都有特定的值。每个条目对应一行(或一条记录)和一列。pd.DataFrame......
  • TSV的空洞是怎么形成的?
      知识星球里的学员问:在TSV工艺填充时,常会看到空洞,请问空洞形成的机理是什么?  TSV的空洞是什么样子?  如上图,a,d,e是有空洞的TSV;b,c是正常的的TSV填充的效果。  TSV填充空洞的形成机理?1,在TSV电镀过程中,电流在孔口区域会集中,导致该区域的电流密度较大。导致沉积速率比孔内......
  • Spring框架学习之ICO、AOP详解及实战案例
    Spring框架学习一、IOCIOC是SpringFramework核心,简单理解就是bean容器,也就是说代码中不需要new()来创建实例了,IOC启动的时候就帮你装载好了,你只需要@Autowired引入即可使用。SpringBean生命周期1.1SpringBean生命周期1.2SpringIOC扩展点二、AOPAOP(AspectOrie......
  • rustling学习随笔
    序言rustling是一个关于rust的练习题的项目.可以帮助大家通过完成一个项目的方式练习rust的语法,我认为对于补充我rust现学现卖过程中的情况很有帮助.下边是GPT对它的介绍:Rustling是专为那些想要学习Rust编程语言的人设计的一个交互式练习集合。无论你是编程新手还是有经......