ArkTS语言入门细节之联合类型
引言
臭宝们,接下来,说一点细枝末节的东西。
变量声明
这样的变量声明,臭宝们(TypeScript除外)或许见得不多,这代表可选声明变量。
name?:string;
那怎么用呢?下面举例
export class SayName {
name:string = '';
constructor(name?:string) {
this.name = name??"张三";
}
GetName(){
return this.name
}
}
在其他页面中引用
//这是张三
Say:SayHello= new SayHello();
//这是李四
Say:SayHello= new SayHello("李四");
为什么会这样呢? 关键在于下面这段代码。name为可选类型,表示用户在创建对象后可以不对name进行赋值。
constructor(name?:string) {
this.name = name??"张三";
}
那么臭宝就要问了,如果不赋值,张三哪来的?这就要看函数里的语句了。这段代码的意思是,如果name的值是undefined(没赋值),那么就用张三赋值给name。
this.name = name??"张三";
再看这一段变量声明,这段会是什么意思呢?
export class SayName {
name:string|undefined=undefined;
constructor(name?:string) {
this.name = name;
}
GetName(){
return this.name
}
}
结果竟是这样的,为什么呢?
//这是空值
Say:SayHello= new SayHello();
//这是李四
Say:SayHello= new SayHello("李四");
这是因为,变量声明变了,这个声明不是单纯的字符串类型了,而是联合类型,它可以是undefined类型也可以是字符串类型,臭宝们不禁又要问,还能这么玩? 是的,这语言玩的很花,很独特,在没有传值时,name默认是undefined类型(因为初始化就是undefined),当用户输入了字符串后,它就成了字符串类型了,但我要说联合类型并不等于单一类型,也就是说string|undefined不等于string。
name:string|undefined=undefined;
如何这么写,会报错
name1:string|undefined='我是联合'
name2:string='我是字符串'
//这一步,会报错
name2 = name1
这些知识会在后面的内容中用到,让臭宝们的代码简洁,下一节见。