来学习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
 
posted @ 2024-12-06 10:42  蜗牛般庄  阅读(8)  评论(0编辑  收藏  举报
Title
页脚 HTML 代码