MST

星途 面试题库

面试题:TypeScript中交叉类型与联合类型的区别

请详细阐述TypeScript里交叉类型(Intersection Types)和联合类型(Union Types)在定义、用法以及实际应用场景上的区别,并各举一个简单代码示例说明。
44.6万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试

定义区别

  • 交叉类型:将多个类型合并为一个类型。它包含了所有类型的特性,新类型具有参与交叉的所有类型的成员。语法为 Type1 & Type2
  • 联合类型:表示一个值可以是几种类型之一。语法为 Type1 | Type2

用法区别

  • 交叉类型:常用于需要对象同时满足多个类型约束的场景。当一个对象需要具有多个不同类型的属性或方法时使用。
  • 联合类型:常用于值可能具有多种类型的情况,比如函数参数可能接收不同类型的值。

实际应用场景区别

  • 交叉类型:例如,一个对象既要满足 User 类型(有 name 属性),又要满足 Admin 类型(有 adminRole 属性),就可以使用交叉类型。
  • 联合类型:比如一个函数接收的参数既可以是 string 类型,也可以是 number 类型。

代码示例

交叉类型示例

interface User {
    name: string;
}

interface Admin {
    adminRole: string;
}

// 交叉类型,一个对象同时具有User和Admin的属性
let userAdmin: User & Admin = {
    name: 'John',
    adminRole: 'SuperAdmin'
};

联合类型示例

// 联合类型,函数参数可以是string或number
function printValue(value: string | number) {
    console.log(value);
}

printValue(10);
printValue('Hello');