TypeScript (四)

93 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 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 不属于 stringnumber 的公共属性。

如果想要访问上面例子中,stringnumber 的公共属性,我们使用两者共用的属性就可以了,比如:

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 属性,所以会报错。