Skip to content

Latest commit

 

History

History
28 lines (19 loc) · 866 Bytes

GetOptional.md

File metadata and controls

28 lines (19 loc) · 866 Bytes
标题 标签
GetOptional(获取可选类型) extends(继承)

获取可选类型。

  • 使用 as 断言对应属性的属性值是否是Required<T>转换成必选接口类型中的属性值,如果是则返回 never,否则返回原属性。

代码如下:

type GetOptional<T> = {
  [K in keyof T as T[K] extends Required<T>[K] ? never : K]: T[K];
};

使用方式:

type GetOptionalRes1 = GetOptional<{ foo: number; bar?: string }>; //  { bar?: string }
type GetOptionalRes2 = GetOptional<{ foo: undefined; bar?: undefined }>; //  { bar?: undefined }

应用场景

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