来学习typescript 吧! --6 联合类型 | 交叉类型 |类型断言
1、联合类型 |
<u>联合类型(Union Types)表示取值可以为多种类型中的一种。 </u>使用 | 分隔每个类型。
let myFavoriteNumber: string | number;
myFavoriteNumber = 'seven';
myFavoriteNumber = 7;
函数使用联合类型
function getString(something: string | number): string {
return something.toString();
}
联合类型的变量在被赋值的时候,会根据类型推论的规则推断出一个类型:
let myFavoriteNumber: string | number;
myFavoriteNumber = 'seven';
2.交叉类型 &
交叉类型通过&操作符将多个类型合并为一个类型
相同名称的属性会被合并,而不同名称的属性则会保留
如果两个类型中有相同的属性但属性类型不同,那么这个属性的类型将是这两个属性类型的联合类型。
interface People {
age: number;
height: number;
}
interface Employee {
employeeId: number;
}
const zxd = (man: People & Employee) => {
console.log(man.height);
console.log(man.age);
console.log(man.employeeId);
};
zxd({ age: 18, height: 180, employeeId: 32145 });
3.类型断言
类型断言(Type Assertion)可以用来手动指定一个值的类型。
值 as 类型 或 <类型>值
value as string <string>value
let someValue: any = "this is a string";
“尖括号”语法
let strLength: number = (<string>someValue).length;
as语法
let strLength: number = (someValue as string).length;
类型断言只能够「欺骗」TypeScript 编译器,无法避免运行时的错误,所以切不可滥用。
let someValue: any = "this is a string";
let strLength: number = (someValue as number).length; // Error: Type 'string' cannot be used as an index type.
使用any临时断言
window.abc = 123 //这样写会报错因为window没有abc这个东西
(window as any).abc = 123 //这样写就不会报错
as const
const name = 'zxd'
name = 'aa' //无法修改
let name2 = 'zxd' as const
names = 'aa' //无法修改
//数组
let a1 = [10, 20] as const;
const a2 = [10, 20];
a1.unshift(30); // 错误,此时已经断言字面量为[10, 20],数据无法做任何修改
a2.unshift(30); // 通过,没有修改指针
类型断言是不具影响力的
在下面的例子中,将 something 断言为 boolean 虽然可以通过编译,但是并没有什么用 并不会影响结果, 因
function toBoolean(something: any): boolean {
return something as boolean;
}
toBoolean(1); // 返回值为 1