Typescript获取类型,类型保护函数检查该类型

yrwegjxp  于 2023-03-09  发布在  TypeScript
关注(0)|答案(1)|浏览(149)

我有一个User类型的类型保护函数。我如何提取这个函数“保护”的类型?使用ReturnType<typeof isUser>显然不起作用,因为函数的返回类型是boolean,而不是User

type User = {
  username: string
}

function isUser(value: unknown): value is User {
  return value !== null && typeof value === "object" && "username" in value;
}

type GuardType<T> = ...

// something like this?
type GuardTypeOfUserGuard = GuardType<typeof isUser>; // should be `User`
hyrbngr7

hyrbngr71#

可以对形状类似的用户定义类型保护函数类型执行条件类型推断:

type GuardType<T> = 
  T extends (x: any, ...rest: any) => x is infer U ? U : never;

我所说的“相似形状”是指它只匹配第一个参数被保护的函数。无论如何,你可以检查它是否工作:

type GuardTypeOfUserGuard = GuardType<typeof isUser>; 
// type GuardTypeOfUserGuard = User

Playground代码链接

相关问题