携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第7天,点击查看活动详情
😊 大家好,我是思淼MJ。
上篇文章介绍了 TypeScript 的五种基本类型,进来来继续介绍另外的几种类型。
联合类型:
🤔思考:什么是联合类型???
📖答案:联合类型标识取值可以为多种类型中的一种类型。
举个简单的例子🌰:
let myDemo:number | string;
myDemo = 'abc';
myDemo = 123;
联合类型使用 | 分隔开所包含的每种类型,比如上面的例子中,我们 let myDemo:number | string; 的意思是:myDemo的值的类型,可以是 number 或者是 string 类型
🤔思考:那如果是赋予的值,不属于所定义中的值的类型呢?
📖答案:是不被允许的。
比如对上面的例子🌰进行修改:
let myDemo:number | string;
myDemo = true;
运行了上面这个例子之后,会发现报错了:
// Type 'boolean' is not assignable to type 'string | number'.
// Type 'boolean' is not assignable to type 'number'.
总结:在定义了变量的类型之后,对变量的赋值只允许是联合类型中的类型。
访问联合类型的属性和方法:
当 TypeScript 不确定一个联合类型的变量是哪种类型的时候,我们只能访问这个联合类型中的所有类型的公共属性或方法。
举个简单的例子🌰:
fonction getLength (item:string | number):number {
return item.length;
}
运行上面的例子,你会发现报错了:
// Property 'length' does not exist on type 'string | number'.
// Property 'length' does not exist on type 'number'.
🤔问题:为什么会报错?
📖答案:item 参数可以为 string 或者 number,而返回值 item.length,在 number 中,并没有此属性,所以会报错,length 不属于 string 和 number 的公共属性。
如果想要访问上面例子中,string 和 number 的公共属性,我们使用两者共用的属性就可以了,比如:
fonction getLength (item:string | number):number {
return item.toString;
}
联合类型的类型推断:
当联合类型的变量被赋值时,会根据类型推断的规则,推断出此类型。
举个简单的例子🌰:
let demoLength:string | number;
demoLength = 'abc';
console.log(demoLength.length); // 3
demoLength = 8;
consoel.log(demoLength.length); // Property 'length' does not exist on type 'number'.
上面例子中,当 demoLength = 'abc'; 时,demoLength 被推断为 字符串类型,所以不会报错;而当 demoLength = 8; 时,demoLength 被推断为数值类型,此类型没有 length 属性,所以会报错。