Skip to content

Latest commit

 

History

History
47 lines (37 loc) · 1.21 KB

Get.md

File metadata and controls

47 lines (37 loc) · 1.21 KB
标题 标签
Get(获取接口属性值) extends(继承)

获取接口属性值。

  • 如果 第二个参数 K 属于第一个参数接口对象 T 的属性,则直接返回对应属性值,如果 K 属于使用 infer 推断每一个由点构成的模板字符串,并且首个推断字符属于对象的属性,则递归的读取属性,否则返回 never

代码如下:

type Get<T, K> = K extends keyof T
  ? T[K]
  : K extends `${infer F}.${infer R}`
  ? F extends keyof T
    ? Get<T[F], R>
    : never
  : never;

使用方式:

type Data = {
  foo: {
    bar: {
      value: 'foobar';
      count: 6;
    };
    included: true;
  };
  'foo.baz': false;
  hello: 'world';
};

type GetRes1 = Get<Data, 'hello'>; //  'world'
type GetRes2 = Get<Data, 'foo.bar.count'>; //  6
type GetRes3 = Get<Data, 'foo.bar'>; //  { value: 'foobar'; count: 6 }
type GetRes4 = Get<Data, 'foo.baz'>; //  false
type GetRes5 = Get<Data, 'no.existed'>; //  never

应用场景

如下所示,鼠标悬浮到对应的类型变量可以查看类型。