如何高效比较类型结构?从 TS 的类型系统到结构 Trie 优化

先问大家一个问题,给定俩个对象该怎么“快速”比较其是否等价?

转字符串比较吗?如果参数顺序不一致呢

遍历吗?可以

但如果嵌套层级过深呢? 好似俩颗树结构比较

深度优先遍历?可以?

如果项目中仅仅是一处比较,暂时这么写当然没有问题,倘若存在很多很多很多组对象呢,届时就达不到快速的基准了。

可能会纳闷,为什么要问这个问题,这个跟主题 ts 类型有什么关联

举个很常见的示例,函数不同情况返回不同参数,猜猜他的返回类型会是什么

const demo = () => {
    if (1) {
        return {
            name: 'xxx',
            age: 1
        }
    }
    else {
        return 1
    }
    return {
        age: 2,
        name: "wwww"
    }
}
type DemoReturn = ReturnType<typeof demo>
// 输入:
// 1 | {
//     name: string;
//     age: number;
// }

通过获取函数返回类型,观察其结果类型,你会惊讶的发现,其结果并不是如下所示

DemoReturn = {
    name: string,
    age: number
} | 1 | {
    age: number,
    name: string
}

这正是因为 ts 内部联合类型进行了比较并删除了相同类型

todo:

那么回归开头的问题,既然 ts 内部也有对象类型比较,

他是否解决了上面抛出了一系列问题,又是否用到了什么黑魔法,

一起来揭开他神秘的面纱

Ts 类型比较的现状