首页 > 其他分享 >TS时常忘记的运算符

TS时常忘记的运算符

时间:2023-07-01 13:12:18浏览次数:32  
标签:const string TS 运算符 var 时常 null undefined


1、可选链运算符?.

可选链运算符,对null和undefined及时停止运算,解放es5的繁琐逻辑判断

// ts
const val = a?.b
 
//es5
var val = a === null || a.b

支持的语法如下:

obj?.prop // 尝试访问可能不存在的属性
obj?.[exp] // 同上,计算属性写法
arr?.[index] // 尝试访问可能不存在的索引
func?.[args] // 尝试调用可能不存在的方法

2、 非空断言运算符!

非空断言运算符,用于断言操作的对象是非null和非undefined类型

从值域中排除nullundefined

unction test (params: number | undefined | null, callback: ()=>number | undefined )
{
    const count = params!;// 排除undefined 和null,不报错
    
    const number = callback!() // 除去undefined
} 

3、可选属性 ?:

主要用于类型声明时候对某个属性进行可选标记,这样在实例化时候缺少某个属性就编译器可以不报错

interface Person{
    name : string;
    age : number;
    gender? : string // 可选属性
}

Partial可将属性标记为可选

// Partial的源码实现
type Partial<T>={
    [key in  keyof T]? : T[key]
}

?表示可选,-?表示必选,回顾一下TS中内置泛型Required

type Required<T>={
    [key in keyof T]-? : T[key] 
}

4、空值合并运算符 ??

当左侧操作数为null或者undefined时,返回右侧的操作数,否则返回左侧的操作数,与||不同的是,逻辑或会在左侧操作数为falsy时(如:“”,0)返回右侧操作数,此时如果对空字符串或者0有意义时使用空值合并运算符会省去es5中的很多判断.

const data1 = 0
 
// 如果data1是undefined或者null,data2=100
const data2 = data1 ?? 100
 
// es5实现
const data2 = data1===undefined || data1===null ? 100 : data1

可用于短路,当空值合并运算符的做表达式不是null或者undefined时,不会对右侧表达式进行求值。

function A() { console.log('A was called'); return undefined;}
function B() { console.log('B was called'); return false;}
function C() { console.log('C was called'); return "foo";}

console.log(A() ?? C());
console.log(B() ?? C());

5、交叉类型运算符 &

用于将多种类型叠加到一起成为一个新类型

type PartialPointX = { x: number; };
type Point = PartialPointX & { y: number; };
 
let point: Point = {
  x: 1,
  y: 1
}

当混入的成员有类型覆盖时,新类型为never

interface X {
  c: string;
  d: string;
}
 
interface Y {
  c: number;
  e: string
}
 
type XY = X & Y;
type YX = Y & X;
 
let p: XY;
let q: YX;
 
// 生成的新类型
type XY={
    c : never;
    d :string;
    e : string
}

6、联合类型运算符 |

表示取值可以是多种类型中的一种,联合类型常与nullundefined一起使用

const sayHello = (name: string | undefined) => { /* ... */ };
 
// 参数可以不填
sayHello("semlinker");
sayHello(undefined);

7、数字分割符 _

不会改变字面量的值,用于逻辑分组便于阅读。

const inhabitantsOfMunich = 1_464_301;
const distanceEarthSunInKm = 149_600_000;
const fileSystemPermission = 0b111_111_000;
const bytes = 0b1111_10101011_11110000_00001101;
 
// 对应的 es5
"use strict";
var inhabitantsOfMunich = 1464301;
var distanceEarthSunInKm = 149600000;
var fileSystemPermission = 504;
var bytes = 262926349;

8、类型断言

在编译时起作用。

let someValue: any = "this is a string";
let strLength: number = (<string>someValue).length;

as语法

let someValue: any = "this is a string";
let strLength: number = (<string>someValue).length;

9、私有字段

私有字段,在class中使用

  • 私有字段必须以#开头
  • 每个私有字段名称都唯一地限定于其包含的类
  • 不能在私有字段上使用Typescript可访问性修饰符,如:public或private
  • 私有字段不能在包含的类之外访问,甚至不能被检测到
valclass Person {
  #name: string;
 
  constructor(name: string) {
    this.#name = name;
  }
 
  greet() {
        console.log(`${this.#name}!`);
  }
}
 
let semlinker = new Person("Semlinker");

10、!!

非内置运算,是连续使用两次“非”运算

var o={flag1:true};  
var test1=!!o.flag1;//等效于var test1=o.flag1||false;  
console.log(test1);//true
var test2=!!o.flag2;//等效于var test2=o.flag2||false;  
console.log(test2);//false 而不是undefined 或 null

由于对null与undefined用 ! 操作符时都会产生true的结果,

所以用两个感叹号的作用就在于,如果设置了o中flag的值(非 null/undefined/0""/等值),自然test就会取跟o.flag一样的值;

如果没有设置,test就会默认为false,而不是 null或undefined。

标签:const,string,TS,运算符,var,时常,null,undefined
From: https://www.cnblogs.com/oOLzYOo/p/17519146.html

相关文章

  • (TS)装饰器
    准备工作:开启ts的装饰器特性,需要在tsconfig.json中开启experimentalDecorators。{"compilerOptions":{"target":"ES5","experimentalDecorators":true}}类装饰器类装饰器在类声明之前声明。类装饰器应用于类的构造函数,可用于观察、修改或替换类定义。类......
  • Ubuntu LTS 版本
        在Linux的世界里,特别是谈到 Ubuntu 的时候,你会遇到LTS(长期支持LongTermSupport)这个词。如果你是一个经验丰富的Linux用户,你可能知道Linux发行版的各个方面,比如LTS版本。但是,新用户或不太懂技术的用户可能不知道。在这一章Linux黑话解释中,你将了解什......
  • Pyside6-QtCharts+psutil实战-绘制一个CPU监测工具
    今天是实战篇章,我们结合可以快速提升我们开发效率的工具一起开实战一波实时读取系统CPU使用情况的折线图。使用的开发工具QtDesigner来开发UI界面。十分便捷。使用起来也算比较的简单了,虽然也存在不少的BUG。对所需要的控件进行拖拽式,就OK。后续会出一个简单的视频录制。第二步,......
  • 与用户交互- 格式化输出 - 基本运算符
    1、与用户交互'''python3'''与"python2"的区别:'''python3'''将获取到的用户输入赋值给变量名resres=input("请输入您的用户名")print(res,type(res))#id返回一串数字(可以看成是内存地址)type返回变量值的数据类型'''inpu......
  • XTTS系列之二:不可忽略的BCT
    重要系统Oracle数据库U2L迁移场景中,如果客户来问我建议,我都会回复说首选就是XTTS,除非XTTS经测试实在是无法满足停机窗口,否则就不要考虑OGG这类方案。换句话说,选择OGG做迁移的场景,都是没有其他办法时才会选用的方案了。而在这类XTTS的迁移项目中,我认为bct的技术是至关重要的,因......
  • python: more Layer Architecture and its Implementation in SQLite
    sqlite3:CREATETABLEDuStudentList( StudentId INTEGERPRIMARYKEYAUTOINCREMENT, StudentName TEXTNOTNULL, StudentNO TEXTNOTNULL, StudentBirthday DATETIME );Model:"""StudentListInfo.py学生类date2023-06-16edit:GeovinD......
  • python + requests:请求头('Content-Type': 'multipart/form-data'),并且files和其他参数
    解释1.在使用'Content-Type':'multipart/form-data'上传文件时,你需要将文件作为请求体的一部分进行传输。而由于文件可能非常大,因此需要将文件分成多个部分进行传输。这就需要使用多部分编码(MultipartEncoding)来将文件分割成多个部分,并将每个部分与其它的表单数据一起打包到一......
  • requirements.txt
    在Python中,你可以使用pip命令来安装依赖包。如果你想要一键安装全部依赖包,你可以创建一个requirements.txt文件,将所有需要安装的依赖包名称以及版本号写入该文件,然后使用以下命令进行安装:pip install -r requirements.txt这将会自动安装requirements.txt文件中列出的所有依......
  • export,export default,exports - 导入导出方法总结
    1.export.default的使用方法特点:export.default向外暴露的成员,可以使用任意变量来接收在一个模块中,exportdefault只允许向外暴露一次在一个模块中,可以同时使用exportdefault和export向外暴露成员//exportdefault-默认导出constm=100;exportdefaultm;//导入......
  • requests库的100种妙用!
    Python的requests库是一个功能强大且广泛使用的HTTP请求库,用于在Python中发送HTTP请求、处理响应、会话管理、Cookie处理以及处理文件上传和下载等方面提供了强大的功能,总的来说,就是:可能有的小可爱不是很能直观了解,今天,我们就一起来看看,requests库到底能做什么。1.发送HTTP请求最被......