今天我就介绍一下日常工作中经常用到的TypeScript的一些新功能和进展。
在
class note { public title : string;publiccontent:stringprivate history : string[];构造函数(title:string,content:string,history : string[]){ this . title=title;this.content=内容;this.history=history}}在ts中使用速记语法:
class note { constructor(public title : string,public content 3360string,private history : string[]){//不需要写这个. title=title}}它看起来可能不像一个有属性的类,但它确实是,使用了Typescript提供的速记形式——直接用构造函数的参数定义属性。
这个速记语法做了很多:
声明一个构造函数参数,其类型声明一个同名的公共属性。当我们创建这个类的实例时,将属性初始化为对应的参数值
consti=undefinedconstk=i?5console.log(k)//5//3.9.2编译consti=undefinedconstk=i!==nulli!==void0?i:5console . log(k);//5这个时候,你一定想说出来。还没结束吗?
Letk=i||5虽然也用这个,但是你不觉得很松懈吗?如果i=0呢?
这是一个在TypeScript中具有私有类字段的类:
classAnimal { # name:string构造函数(theName:string){this。# name=theName}}在private关键字上面使用私有类字段的区别在于前者有更好的运行时保证。用private关键字声明的TypeScript字段将成为编译后的JavaScript代码中的常规字段。另一方面,私有类字段在编译后的代码中仍然是私有的。
试图在运行时访问私有类字段将导致语法错误。我们也不能用浏览器开发工具检查私有类字段。
有了私有类字段,我们终于在JavaScript中获得了真正的隐私。
Typeaddress=[string,number] functionsetaddress(.args : address){//somecodehereconsole . log(args)}当我们这样定义函数参数时,在使用函数时,编辑器的智能提示只会提示我们参数类型,而失去了参数含义的描述。
为了改善这一点,我们可以使用Labeledtupletypes,我们可以这样定义参数:
type address=[街道名称: string,街道编号: number] functionsetaddress(.args : address){//somecodeereconsole . log(args)}这样,在调用函数时,我们的参数得到相应的语义,使得代码更容易维护。
constmessage=`text正如FlavioCopes所说,模板文字提供了以前引用的字符串所没有的特性:
定义多行字符串非常方便。变量和表达式很容易插值。您可以使用模板标记创建DSL(DomainSpecificLanguage)模板。模板的文字类型与JavaScript中的模板字符串语法完全相同,但它们在类型定义中使用:
typettopbottom=' top ' | ' bottom ' typeleftright=' left ' | ' right ' type position=` { top bottom }-{ left right } `当我们定义一个特定的文字类型时,TypeScript将通过拼接内容生成一个新的字符串文字类型。
下面是一个使用省略工具的例子,它复制原始类型的所有属性,除了那些我们选择不包含的属性。
type user={ name : string age : number location : string } type my user=omit user,' name '以上是我工作中经常用到的一些东西,其他的以后再分享。就这样?
~之后我在刷碗,我要和鸡吵架了。下次再见。