前言

在越来越深入使用ts的时候,我们会遇到这种痛点,有人声明了一个类型A,然后另一个人声明了B类型,此时我需要将A、B类型交叉起来,再增加一些新属性,这很好,但是当我们将鼠标移动到定义的新类型C上面的时候,你会发现你只能看到自己新增的属性,A、B类型只能看到一个名字,你无法感知到它们具体都有哪些属性。

当然,这在开发中并不会有多大的影响,大不了跳转查看就是了,但是我们能不能不跳转进行预览呢?

于是晚上刷小破站看到国外的一个大神的视频,讲述了一个有趣的分享,他分享了一个自定义的Prettify类型,通过使用这个类型我们就能查看到完整的属性了。

不多说,上教程。

教程

interface Test {
  name: string;
  age: number;
}

interface Test2 {
  a: string;
  b: number;
}

type Test3 = Test & Test2 & { c: boolean };

interface Test4 extends Test, Test2 {
  c: boolean;
}

我们现在有这么些类型,其中Test3Test4是我在上面所述的情况,我们看下它的预览效果。

你会发现预览炒鸡难受!

下面我们创建一个Prettify类型:

type Prettify<T> = {
  [K in keyof T]: T[K];
};

然后我们再去利用它创建一个新类型:

type B = Prettify<Test3>;

type C = Prettify<Test4>;

此时我们再将鼠标移动到上面,就可以看到完整的属性了。

一清二楚还是很快乐的。

但是这个工具类型只能在你声明的文件中使用,如果我希望全局都能使用,比较便捷的办法就是创建一个全局类型文件,比如:type-helpers.d.ts,内容如下:

declare global {
  type Prettify<T> = {
    [K in keyof T]: T[K];
  } & {}; 
}

此时我们就能愉快的在全局任意处使用该类型了,当然,我更加建议这个类型只用来辅助开发,不能作为正式类型去使用

分类: TypeScript 标签: TypeScript索引访问类型预览类型Prettify

评论

暂无评论数据

暂无评论数据

目录