Built-in Utility Types

当某种类型对于大多数代码来说都非常有用时,他们就会被添加到 TypeScript 中并且被大家使用。这意味着您可以在代码中直接使用他们,而无需担心它们的可用性。 Partial 将一个类型的所有属性转换为可选的

interface Sticker {
  id: number;
  name: string;
  createdAt: string;
  updatedAt: string;
  submitter: undefined | string;
}

type StickerUpdateParam = Partial;

// Readonly

// 将一个类型的所有属性转换为只读的

type StickerFromAPI = Readonly;

// Record

// 创建一个具有 KeysFrom 列表中所有指定属性的类型,并且将他们值的类型设置为 Type

// 列出需要哪些 key。
type NavigationPages = "home" | "stickers" | "about" | "contact";

// 每个数据(上面的key ^)都需要的数据的形状。
interface PageInfo {
  title: string;
  url: string;
  axTitle?: string;
}

const navigationInfo: Record = {
  home: { title: "Home", url: "/" },
  about: { title: "About", url: "/about" },
  contact: { title: "Contact", url: "/contact" },
  stickers: { title: "Stickers", url: "/stickers/all" },
};

// Pick

// 由 Type 类型选取 Keys 中指定的属性并创建一个新的类型。 本质上是由某种类型中提取一部分类型信息。
type StickerSortPreview = Pick;

// Omit

// 由 Type 类型排除 Keys 中指定的属性并创建一个新的类型。 本质上是由某种类型中排除一部分类型信息。
type StickerTimeMetadata = Omit;

// Exclude

// 创建一个类型,其中 Type 的任何属性都与 RemoveUnion 不重合。

type HomeNavigationPages = Exclude;

// Extract

// 创建一个类型,其中 Type 的任何属性都与 MatchUnion 重合。

type DynamicPages = Extract;

// NonNullable

// 从一组类型中将 null 和 undefined 排除后创建一个类型,对有效性检查非常有用。

type StickerLookupResult = Sticker | undefined | null;
type ValidatedResult = NonNullable;

// ReturnType

// 导出一个类型的返回值类型。

declare function getStickerByID(id: number): Promise;
type StickerResponse = ReturnType;

// InstanceType

// 创建一个是某个具有构造函数的类或对象的实例的类型。

class StickerCollection {
  stickers: Sticker[];
}

type CollectionItem = InstanceType;

// Required

// 创建一个类型,将所有 Type 的可选属性转换为必要的。

type AccessiblePageInfo = Required;

// ThisType

// 与其他类型不同,ThisType 不返回新的类型,而是操作函数定义内 this 的类型。您只可以在 TSConfig 中 noImplicitThis 开启的情况下使用 ThisType。 https://www.typescriptlang.org/docs/handbook/utility-types.html