TypeScript学习(三)

Ts总结2、any 类型,unknown 类型,never 类型(编译选项noImplicitAny) 阅读详情

1.any和unknow的区别:

主要区别:

unknown和any都是TS中的顶级类型,但主要区别在于:使用any相当于彻底放弃了类型检查,而unknown类型相较于any更加严格,在执行大多数操作之前,会进行某种形式的检查。

const any:foo = 123
console.log(foo.msg) // 符合ts的语法
const a : unknown = foo // ok
const b : any = foo // ok
const c : string = foo // ok


const bar : unknown = 222
console.log(bar.msg) // 报错
const a : unknown = bar // ok
const b : any = bar // ok
const c : string = bar // 报错
 

foo是any类型,任何操作都是没有类型检查的,因此对其进行任意类型的赋值都是合法的 

bar是unknown类型,因此不能确定是否有msg属性,不能通过语法检查,同时unknown类型的值也不能赋值给any和unknown以外的类型变量 

联合类型和交叉类型:

在联合类型中,unknown类型会吸收任何类型。即如果任一组成类型是unknown,联合类型也会相当于unknown

type UnionType1 = unknown | null;       // unknown
type UnionType2 = unknown | undefined;  // unknown
type UnionType3 = unknown | string;     // unknown
type UnionType4 = unknown | number[];   // unknown

而any更是能吸收unknown类型,如果任一组成类型是any,则联合类型相当于any

UnionType5 = unknown | any;  // any

由于每种类型都可以赋值给unknown类型,所以在交叉类型中包含unknown不会改变结果。

type IntersectionType1 = unknown & null;       // null
type IntersectionType2 = unknown & undefined;  // undefined
type IntersectionType3 = unknown & string;     // string
type IntersectionType4 = unknown & number[];   // number[]
type IntersectionType5 = unknown & any;        // any

用法:

优先使用unknown,尽量避免any的使用,unknown一般用来接收暂时不知道类型的变量(如接口返回的数据)

const a : unknown = await ajax.get('/api/users')

const b = a as number(类型断言)

2.什么是never类型:

如果把any看作是全集,unknown看作是未知集,那么never就是空集

如type A: string & number, 此时A的类型即为never

never的使用:

type A = string | number | boolean;
const a : A = ('hello' as any);
if (typeof a === 'string') {
    a.split('')
}else if ( typeof a === 'number') {
    a.toFixed(2)
}else if ( typeof a === 'boolean') {
    a.valueOf()
}else {
    a.toString() // 此时a即为never,对a.的任何操作都会报错
    console.log('没了')
}

3.enum的使用

写法:

//默认从0开始,赋值后往后依此类推
enum Direction{
    Up,
    Down,
    Left,
    Right,
}
console.log(Direction.Up)//0
console.log(Direction[0])//Up

何时使用enum:

一般用于前后端两组数据之间的映射

还可用于前端权限控制

enum Permission {
    None = 0, // 0000
    Read = 1 << 0, // 0001
    Write = 1 << 1, // 0010
    Delete = 1 << 2, // 0100
    Manage = Read | Write | Delete, // 0111
}

type User = {
    permission:Permission
}

const user: User = {
    permission:0b0101 // 0b代表二进制
}

if ((user.permission & Permission.Write) === Permission.Write) {
    console.log('拥有写权限')
}
if ((user.permission & Permission.Manage) === Permission.Manage) {
    console.log('拥有管理权限')
}

何时不用enum :

一般只有number枚举时才会使用enum,string或者string和number混用时枚举时不使用enum

TypeScript详解(安装使用、基础类型总结、类型断言用法、接口、类、函数、泛型、相同类型之间赋值、unknown、枚举等) TypeScript概念 是 JavaScript 的一个超集,它可以编译成纯JavaScript,也可以在任何浏览器操作系统运行。简单来说就是JS的一个升级版本,给JS加了限制规范(接口等),也扩展了JS(类等)的能力 基础类型 注意和JS不同,JS区分基础类型和复杂数据类型,TS不区分,即基础类型就是数据类型,它包括JS中的6中数据类型(undefined、null、boolean、number、string、object),不包含symbol。除此之外还包含函数、数组、元祖、枚举、任意值(. 阅读详情

相关推荐

保姆级教程:用Protege 5.5.0从零构建你的第一个知识图谱(附实战案例文件)

本文提供了一份详细的Protege 5.5.0使用指南,从零开始构建知识图谱。涵盖环境配置、本体结构设计、实例填充到可视化展示的全流程,特别适合初学者快速掌握知识建模技术。通过实战案例演示,帮助读者理解如何定义类、属性及建立实例关系,是学习知识图谱构建的实用教程。

weixin_42548816的博客 555

规范TS项目Any类型的使用

背景 在使用React的开发项目时,大多数关于ts的类型定义问题,可以在备忘单里面找到;但是当遇到数据类型为数组,对象的时候,为了方便,使用any来进行定义,或者直接用空数据来初始化,当项目变得庞大时,一个组件可能会包括20多个any,使得不容易维护。 由于any会完全失去类型判断,其实是比较危险的,使用any就相当于放弃了类型检测,也就基本上放弃了typescript。 规范化TS的写法,将更有利用项目更好地维护,提高代码的可读性。 使用any较多的场景 定义变量时,变量的数据来源于接口,而接口数量多,定

weixin_43827779的博客 6800

PCB设计实践(三十二)PCB设计遇到大电流时的设计技巧

本文系统阐述10A至数百安培PCB设计的六大关键技术。载流能力优化强调铜厚选择(2-4oz)、线宽计算及并联结构;热管理提出散热孔阵列、铜基板嵌入等方案;布局策略包括功率分区和低阻抗路径设计;材料工艺推荐铝基板、陶瓷基板等高效解决方案;安全设计涵盖电气隔离与保护电路;验证环节需结合热仿真与实测。典型150A电机驱动板案例显示,通过4oz铝基板、散热孔阵列等设计,可实现温升≤45℃的稳定运行。核心在于铜厚线宽协同、主动散热及严格验证。

致力于硬件设计、人工智能知识及技术的分享,不断鞭策自己成长,共同进步! 4232

ts中 any 和 unknown 有什么区别,分别什么时候使用

(2)unknown 代表未知类型,更加严格,在对 unknown 类型的值执行大多数操作之前,必须进行某种形式的检查。unknown 还是可以保证类型安全的,在需要使用顶级类型的时候,还是用 unknown,使用 a as any as string 之类的,也可以让类型检查通过,建议使用。(1)any代表任意类型, 是不做任何检查,相当于不使用 ts,不建议使用,使用 a as any as string 之类的,可以让类型检查通过,但是不建议使用。

有一棵树的博客 2522

PCIe链路训练Recovery状态机:从RcvrLock到链路稳定的关键路径

本文深入解析PCIe链路训练中的Recovery状态机,特别是RcvrLock状态的关键作用。从Block对齐、均衡预设值应用到状态转移条件,详细介绍了确保链路稳定的技术要点,并提供了高速率下的特殊处理方法和常见问题排查指南,帮助工程师解决PCIe链路不稳定问题。

weixin_28739079的博客 175

(MIUI)小米手机录音文件深度寻踪:从系统缓存到数据目录的实战解析

本文深入解析了MIUI系统中录音文件丢失的常见原因及解决方案,包括系统升级兼容性问题、应用缓存机制异常和存储权限变动。通过实战操作指南,详细介绍了如何从系统目录、数据库层面恢复录音文件,并提供了预防措施和自动化备份方案,帮助小米手机用户有效找回重要录音数据。

weixin_42699679的博客 518

TS中any与unknwon的区别

unknown和any的主要区别在于:使用any相当于彻底放弃了类型检查,而unknown类型相较于any更加严格,在执行大多数操作之前,会进行某种形式的检查。 let foo: any = 123; console.log(foo.msg); // 符合TS的语法 let a_value1: unknown = foo; // OK let a_value2: any = foo; // OK let a_value3: string = foo; // OK let bar: un

Dax1_的博客 3656

双重分组进位跳跃进位链

跳跃进位链

qq_62260432的博客 941

TypeScript学习【三】

这篇文章系统介绍了TypeScript面向对象编程的核心概念,主要内容包括:1.类的基本定义和使用(字段、方法、构造函数);2.继承机制(extends、super、方法重写);3.静态成员和访问控制修饰符(public/protected/private);4.类与接口的实现关系;5.对象类型模板;6.强大的泛型特性(泛型函数、接口、类、约束及默认值)。文章通过大量代码示例展示了TypeScript如何增强JavaScript的面向对象能力,特别是类型系统和泛型编程特性,为开发者提供了更严格的类型检查和更

zheshiyangyang的博客 812

Openclaw错误分析与解决方案之:Agent couldn’t generate a response.

Openclaw错误分析与解决方案之:Agent couldn't generate a response. Note: some tool actions may have already been executed — please verify before retrying.

多媒体编程、网络编程、系统编程、网络安全编程、驱动编程 1317

1. 如何使用扣子工作流一键生成儿童绘本(可以发到小红书,微信公众号图文等)

本文介绍了使用扣子智能体一键生成儿童绘本的工作流。用户只需输入绘本主题,系统会自动生成Markdown格式内容,可直接发布到优快云、小红书等平台,还支持推送至微信公众号草稿箱。操作步骤包括:访问扣子网站导入工作流源代码,输入主题试运行,查看实时进度和最终输出结果。工作流编辑器会显示每个节点的执行状态和耗时,支持通过"查看日志"功能回溯历史运行记录。文末附有工作流源代码下载链接。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1250

TypeScript学习-21 三斜线指令

21 三斜线指令三斜线指令/// \预处理输入文件错误使用 --noResolve/// \/// \/// \amdModule.tsamdModule.js/// \ 三斜线指令 三斜线指令是包含单个XML标签的单行注释。注释的内容会做为编译器指令使用。 三斜线指令仅可放在包含它的文件的最顶端。一个三斜线指令的前面只能出现单行或多行注释,这包括其它的三斜线指令。如果它们出现在一个语句或声明之后,那么它们会被当做普通的单行注释,并且不具有特殊的涵义。 /// <reference path="…"

贰十二的博客 808

【示波器专题】无源探头的常用附件

使用探头进行测试,我们不仅要知道探头的原理,还需要了解探头的常用附件及其使用方式,这样才能在尽可能在测试中提高效率且减少出错的概率

一点硬件 692

typeScript学习(三)

今天我们来学习一下接口 1.接口的初认识(interface) 下面介绍关于接口的属性类型的基本定义 //定义接口 interface Person{ name: string; age: number; sex: string; //不确定该值是否有值,前面加上?,表示该值不确定 money?: number; } //定义对象 const person1= { name: '大脚', age: 18, sex: "男", mone

李@@的博客 202

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

TypeScript 学习三 类

1,类: 类是TypeScript的核心,大部分代码都是写在类里面; 声明:class 类名{ 属性; 方法(){};} 注意:类名首字母同样大写,但是方法不需要表明类型,直接写方法名加()即可;属性也不要声明类型;直接写属性名即可; 但是可以加上访问控制符public(类外类内都可访问),protected(类内和子类里可访问),private(类内访问); 用protec...

138

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

TypeScript及React学习系列三:typescript中的函数

typescript中的函数 函数的定义 方法的可选参数 默认参数 剩余参数 函数重载 箭头函数(ES6) 1. 函数的定义 ES5中,两种定义函数的方式:函数声明法和匿名函数法 //函数声明 function run(){ return "run"; } //匿名函数 var run1 = function(){ reutrn "run1"; } TS中同样有函数声明法和匿名函数法,如下: //函数声明 function run():number{ return 12

happydrink233的博客 832

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Typescript学习之路(三)

* 普通装饰器(无法传参), 装饰器工厂(可传参) * 执行顺序: 属性 > 方法 > 方法参数 > 类 * 多个同样的修饰器,先执行后面的 * 调用api

xiaomomi的博客 212

typescript学习(三)

这里主要学习如何去使用,泛型算是typescript中的重点和难点,在实现接口当中经常会去使用。

weixin_45953482的博客 310

typescript学习回顾(三)

ts的枚举,模块化,接口等内容

weixin_42770320的博客 882

TypeScript 基础学习(三)

TypeScript 基础学习(三)回顾es5继承ts中的类,类的继承,属性修饰符类,类的继承属性接口可选属性函数类型接口可索引接口类类型接口接口的扩展 今天接着学习ts中的类相关知识 回顾es5继承 ts中的类,类的继承,属性修饰符 类,类的继承 接口的作用: 在面向对象的编程中,接口是一种规范的定义,它定义了行为和动作的规范,在程序设计里面,接口起到一种限制和规范的作用。 接口定义了某一批类所需要遵守的规范,接口不关心这些类的内部状态数据,也不关心这些类里的方法和实现细节,它只规定这批类里面必须提供某些

weixin_44288627的博客 210

TypeScript前端学习(三)

这次笔记就分享到这里,都是基础知识,uping!

zwrlj527的专栏 662

TypeScript学习总结(三)

接口的定义通常使用interface这个例子中,我们定义了一个Person接口,它要求实现类(或对象)有name和age两个属性,并且必须有一个sayHello方法,该方法不需要返回值。接口的实现可以通过implements} }${this} }} }${this} }} }在这个例子中,我们创建了一个Student类,并且通过implements关键字来表明它实现了Person接口。因此,Student类必须实现Person。

qq_34185872的博客 479

TypeScript 入门学习(三):TypeScript 函数定义

TypeScript 函数定义 函数定义 // 函数声明法 function fun(): string { return 'xxx';} // 匿名函数声明法 var fun = function(): string { return 'xxx';} 函数传参 // 传入参数 function foo(name: string, age: number): string { ...

Star's Tech Blog 656

TypeScript学习笔记(三)

类型详细介绍。

weixin_46112174的博客 1080

typescript学习(三)——类

类的定义 在es6中,为了让js类的写法更像面向对象的形式,引入了class语法糖实现类。 ts中的类是在es6的基础上加上类型强定义实现的。 阮一峰教程:es6类的实现 类的继承——extends关键字 类的修饰符 public公有类型:变量在当前类里面、子类、类外面都可以访问 protected保护类型:变量在当前类里面、子类中可以访问,在类外面不能访问 private私有类型:只能在当前类里面访问,子类、类外部无法访问 不加修饰符时,默认是公有类型属性 静态属性、静态方法 多态——继承的一种 多态

weixin_42597880的博客 331
上一篇: TypeScript学习(二)
下一篇: TypeScript学习(四)
Lxg-JJJJ
博客等级 码龄7年 960粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值