Skip to content

TS高级 - 交叉类型

交叉类型(Intersection Types)

交叉类型是将多个类型合并为一个类型。 这让我们可以把现有的多种类型「叠加」到一起成为一种类型,它包含了所需的所有类型的特性。

例如, FrontEndEngineer = Name & Age & Skill,FrontEndEngineer同时是 Name 和 Age 和 Skill。 就是说这个类型的对象同时拥有了这三种类型的成员。

js
// 一个简单的 DEMO
type Name = {
    name: string;
};
type Age = {
    age: number;
};
type Skill = {
    canCode(): boolean;
    other: number;
}
type FrontEndEngineer = Name & Age & Skill;

function getFrontEndEngineer<T>(user: T): T {
    return user;
}
let bob = getFrontEndEngineer<FrontEndEngineer>({
    name: 'Bob',
    age: 28,
    canCode: () => {
        return true
    },
    other: 10
});
console.log(bob);           // { name: 'Bob', age: 28, canCode: [Function: canCode], other: 10 }