1.类型断言
当你比 TypeScript 编译器更清楚某个值的具体类型时,可以使用类型断言来"告诉"编译器。它不会执行任何运行时检查,仅仅是在编译阶段进行类型转换。
写法1:值 as 类型(推荐)
写法2:<类型>值
ts
const getLength = (strOrArr: string | string[]): number => {
if (typeof strOrArr === 'string') {
// 在这个 if 块里,编译器已经知道它是 string 类型,不需要断言
return strOrArr.length;
} else {
// 假设你知道它是一个数组,但为了类型安全,可以用断言
return (strOrArr as string[]).length;
}
}
// console.log(getLength("YaeZed"));//输出6
// console.log(getLength(["YaeZed", "YaeSakura"]));//输出2
2.联合类型
当一个变量可以是多种类型中的任意一种时,使用联合类型。这在处理可能返回不同类型值的函数或处理多种可能状态的变量时非常有用。
写法:类型 | 类型
ts
/**
* 联合类型
*/
let phoneNum: number | string;
// phoneNum = 1234567890;
phoneNum = '1234567890';
// console.log(phoneNum.length);//这里只在string类型时能用
/**
* 函数使用联合类型
*/
const fn = (something: number | boolean): boolean => {
return !!something//判断传入的是否为真值,两次非可以强转为布尔类型
}
// console.log(fn(true));
3.交叉类型
当你需要将多个类型组合成一个新类型时,使用交叉类型。新类型会拥有所有被组合类型的所有成员,就像是把它们的特性"融合"在了一起。这在组合对象类型时特别有用。
写法:类型 & 类型
举个栗子:将一个User
接口和一个Contact
接口合并成一个UserContact
接口。
ts
interface User {
id: number;
name: string;
}
interface Contact {
phone: string;
email: string;
}
// 交叉类型:新类型 UserContact 同时拥有 User 和 Contact 的所有属性
type UserContact = User & Contact;
let myProfile: UserContact = {
id: 1,
name: "Alice",
phone: "123-456-7890",
email: "alice@example.com",
};
参考文章
小满zs 学习typeScript6(类型断言|联合类型|交叉类型)xiaoman.blog.csdn.net/article/det...