TS中的问号?与感叹号!是什么意思
参考
巧⽤ES系列4:TypeScript中的问号?与感叹号!是什么意思?
⼀、什么是?(问号)操作符?
在TypeScript⾥⾯,有4个地⽅会出现问号操作符,他们分别是
1.三元运算符
//当isNumber(input)为True时返回?:之间的部分;
//isNumber(input)为Fal时返回:;之间的部分
consta=isNumber(input)?input:String(input);
2.可选参数
//这⾥的?表⽰这个参数field是⼀个可选参数
functiongetUr(ur:string,field?:string){
}
3.成员
//这⾥的?表⽰这个name属性有可能不存在
classA{
name?:string
}
interfaceB{
name?:string
}
4.安全链式调⽤
//这⾥Error对象定义的stack是可选参数,如果这样写的话编译器会提⽰
//出错TS2532:Objectispossibly'undefined'.
returnnewError().('n');
//我们可以添加?操作符,当stack属性存在时,调⽤。
//若stack不存在,则返回空
returnnewError().stack?.split('n');
//以上代码等同以下代码,感谢@dingyanhe的监督
consterr=newError();
&&('n');
⼆、什么是!(感叹号)操作符?
在TypeScript⾥⾯有3个地⽅会出现感叹号操作符,他们分别是
1.⼀元运算符
//!就是将之后的结果取反,⽐如:
//当isNumber(input)为True时返回Fal;
//isNumber(input)为Fal时返回True
consta=!isNumber(input);
2.成员
//因为接⼝B⾥⾯name被定义为可空的值,但是实际情况是不为空的,
//那么我们就可以通过在class⾥⾯使⽤!,重新强调了name这个不为空值
classAimplementedB{
name!:strin吕承谕 g
}
interfaceB{
name?:string
}
这⾥可以参考ts更严格的类到字组词 属性检查
Typescript2.7引⼊了⼀个新的控制严格性的标记–strictPropertyInitialization,这个参数在中来配置
"strictNullChecks":true
"strictPropertyInitialization":true
作⽤
使⽤这个标记会确保类的每个实例属性都会在构造函数⾥或使⽤属性初始化器赋值。
它会明确地进⾏从变量到类的实例属性的赋值检查
举例
classC{
foo:number;
bar="hello";
baz:boolean;
constructor(){
=42;
}
}
上述代码,⾸先编辑器会报错:
属性“baz”没有初始化表达式,且未在构造函数中明确赋值。ts(25沙王出装 64)
。
其次在编译磷酸氢钙咀嚼片 报错:
errorTS2564:Property'baz'hasnoinitializerandisnotdefinitelyassignedintheconstructor.
两种都告诉开发者,应该给baz显⽰赋值,但是某种情况下,在初始化的时候我们并不想赋值,更期望是undefined,⽽后再去赋值,此时!:就
派上⽤场了。
在上述代码中属性baz冒号之前加上!,这样就不会报大学班级 错了
classC{
foo:number;
bar="hello";
baz!:boolean;
constructor(){
=42;
}
}
3.强制链式调⽤
//这⾥Error对象定义的stack是可选参数,如果这样写的话编译器会提⽰
//出错TS2532:复活英文 Objectispossibly'undefined'.
newError().('n');
//我们确信这个字段100%出现,那么就可以添加!,强调这个字段⼀定存在
newError().stack!.split('n');
本文发布于:2023-03-20 21:22:18,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/zhishi/a/167931853839782.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:undefined是什么意思.doc
本文 PDF 下载地址:undefined是什么意思.pdf
留言与评论(共有 0 条评论) |