首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Typescript access嵌套条件类型

是一种在Typescript中使用条件类型进行嵌套访问的技术。条件类型是Typescript中的一种高级类型,它允许根据给定的类型条件来确定最终的类型。

在访问嵌套条件类型时,我们可以使用条件类型的嵌套结构来根据不同的条件选择不同的类型。这可以帮助我们在编写类型安全的代码时,根据不同的情况来确定最终的类型。

以下是一个示例代码,演示了如何使用Typescript access嵌套条件类型:

代码语言:txt
复制
type User = {
  id: number;
  name: string;
  isAdmin: boolean;
};

type Admin = {
  id: number;
  name: string;
  isAdmin: true;
};

type UserType<T> = T extends { isAdmin: true } ? "admin" : "user";
type Access<T> = T extends "admin" ? Admin : User;

function getUserType<T extends User>(user: T): UserType<T> {
  return user.isAdmin ? "admin" : "user";
}

function getUser<T extends User>(user: T): Access<UserType<T>> {
  if (user.isAdmin) {
    return {
      id: user.id,
      name: user.name,
      isAdmin: true,
    } as Access<UserType<T>>;
  } else {
    return {
      id: user.id,
      name: user.name,
      isAdmin: false,
    } as Access<UserType<T>>;
  }
}

const user: User = {
  id: 1,
  name: "John Doe",
  isAdmin: false,
};

const admin: Admin = {
  id: 2,
  name: "Admin",
  isAdmin: true,
};

const userType = getUserType(user);
console.log(userType); // Output: "user"

const userAccess = getUser(user);
console.log(userAccess); // Output: { id: 1, name: "John Doe", isAdmin: false }

const adminType = getUserType(admin);
console.log(adminType); // Output: "admin"

const adminAccess = getUser(admin);
console.log(adminAccess); // Output: { id: 2, name: "Admin", isAdmin: true }

在上面的示例中,我们定义了一个User类型和一个Admin类型,它们都有idnameisAdmin属性。然后,我们使用条件类型UserType来确定用户类型是"admin"还是"user",并使用条件类型Access来确定最终的访问类型。接下来,我们定义了两个函数getUserTypegetUser,分别用于获取用户类型和用户访问权限。最后,我们创建了一个用户对象user和一个管理员对象admin,并使用上述函数来获取它们的类型和访问权限。

总结一下,Typescript access嵌套条件类型是一种在Typescript中使用条件类型进行嵌套访问的技术。它可以帮助我们根据不同的条件选择不同的类型,从而实现类型安全的编程。在实际应用中,我们可以根据具体的业务需求使用这种技术来设计和实现更加灵活和可靠的类型系统。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

TypeScript条件类型

条件类型(Conditional Types)是TypeScript中一种强大的类型系统特性,它允许我们根据类型关系来推断和选择类型。...根据条件的结果,返回不同的字符串类型。分布式条件类型条件类型还可以在联合类型上使用,这称为分布式条件类型。当我们传入一个联合类型的参数时,条件类型会遍历每个成员,并根据条件进行推断。...如果T可以赋值给U,则返回T;否则返回never类型条件类型嵌套条件类型还可以相互嵌套,以构建更复杂的类型逻辑。type MyType = T extends string ?...boolean>; // { other: boolean }type TypeD = MyType; // { other: Date }在这个例子中,MyType嵌套了两个条件类型...条件类型TypeScript类型系统的一个重要部分,它允许我们在类型级别上进行条件分支和类型选择。通过巧妙地组合泛型、联合类型条件类型,我们可以定义出非常复杂且强大的类型

21940

TypeScript条件类型(十)

TypeScript 2.8版本引入了条件类型(Conditional Types),TS条件类型可以进行类型选择,具体用法可以使用三元运算符实现,JS中的三元运算符用法一样,通过判断得到最终结果,TS...条件类型最终得到的是数据类型。...条件类型条件类型允许根据一个或多个条件类型进行推断,并且还能在在类型级别上进行复杂的逻辑运算和类型操作。一、基本用法当T类型可以赋值给U类型时,则返回X类型,否则返回Y类型。...| {}> // "function" | "object"二、分布式条件类型条件类型中,如果被检查的类型是一个 “裸” 类型参数,即没有被数组、元组或 Promise 等包装过,则该条件类型被称为分布式条件类型..."X" : "Y" = "X" | "Y"三、非分布式条件类型当T被数组、元组、Promise等包裹时,则运算过程中不会分解成多个分支,则该条件类型为非分布式条件类型

18720

TypeScript】TS条件类型(十二)

TypeScript 2.8版本引入了条件类型(Conditional Types),TS条件类型可以进行类型选择,具体用法可以使用三元运算符实现,JS中的三元运算符用法一样,通过判断得到最终结果,TS...条件类型最终得到的是数据类型。...条件类型====条件类型允许根据一个或多个条件类型进行推断,并且还能在在类型级别上进行复杂的逻辑运算和类型操作。一、基本用法当T类型可以赋值给U类型时,则返回X类型,否则返回Y类型。...| {}> // "function" | "object"二、分布式条件类型条件类型中,如果被检查的类型是一个 “裸” 类型参数,即没有被数组、元组或 Promise 等包装过,则该条件类型被称为分布式条件类型..."X" : "Y" = "X" | "Y"三、非分布式条件类型当T被数组、元组、Promise等包裹时,则运算过程中不会分解成多个分支,则该条件类型为非分布式条件类型

18610

TypeScript 条件类型精读与实践

TypeScript 也不例外,使用条件类型可以描述输入类型与输出类型之间的关系。 本文同步首发在个人博客中,欢迎订阅、交流。...即当条件类型作用于泛型类型时,联合类型会被拆分使用。...工具类型 心细的读者可能已经发现了 Demo 类型的声明过程其实就是 TypeScript 官方提供的工具类型中 Exclude 的实现原理,其用于将联合类型...true : false) 在 TypeScript类型定义中,若在箭头函数中使用 extends 也是同理,由于从左向右的阅读习惯,也会导致阅读者对类型代码的执行顺序感到困惑。...Curry, R> : R) 结合类型推导使用条件类型TypeScript 中,一般会结合 extends 来使用类型推导 infer 语法。使用它可以实现自动推导类型的目的。

70320

PHP | 条件嵌套、循环嵌套条件循环相嵌套

1.条件嵌套 demo: 假设在发3月工资的时候,不仅判定性别,还要判定男性是否有房,没有房,可以发放住房补贴,对于女性,判定是否怀孕,怀孕还有怀孕补贴: ---- 2.循环嵌套 循环结构嵌套,就是类似于跑多个足球场(多层循环嵌套), 例如假设有两个足球场(两个循环),一个大足球场(外循环),一个小足球场(内循环), 在大足球场跑一圈后,再到小足球场跑几圈...2011:林平之44 2012:曲洋89 2013:任盈盈92 2014:向问天93 2015:任我行87 2016:冲虚58 2017:方正74 2018:岳不群91 2019:宁中则90 ---- 3.条件循环相嵌套...10个学生的学号和姓名,用数组存储 $query = '2014'; //使用循环结构遍历数组,获取学号和姓名 foreach($students as $key => $v) { //使用条件结构

4.2K30

索引类型、映射类型条件类型_TypeScript笔记12

索引类型查询操作符(index type query operator) T[K]:索引访问操作符(indexed access operator): 索引类型查询操作符 keyof T取类型T上的所有...,即所谓“拆箱” 三.条件类型 条件类型用来表达非均匀类型映射(non-uniform type mapping),能够根据类型兼容关系(即条件)从两个类型中选出一个: T extends U ?...但条件类型无非两种可能类型,所以let b: string | number = a;一定是合法的(无论x是什么类型) 可分配条件类型 可分配条件类型(distributive conditional...X : Y) 例如: // 嵌套条件类型类似于模式匹配 type TypeName = T extends string ?...TypeScript 还内置了一些常用的条件类型: // 从 T 中去掉属于 U 的子类型的部分,即之前示例中的 Diff type Exclude = T extends U ?

1.7K10

TypeScript 官方手册翻译计划【九】:类型操控-条件类型

项目地址:TypeScript-Doc-Zh,如果对你有帮助,可以点一个 star ~ 本章节官方文档地址:Conditional Types 条件类型 在大多数应用的核心中,我们需要基于输入决定执行哪一个逻辑...条件类型就可以用于描述输入类型和输出类型之间的联系。...在条件类型中进行推断 在上面的例子中,我们使用条件类型去应用约束并提取出类型。由于这种操作很常见,所以条件类型提供了一种更简单的方式来完成。...条件类型提供了 infer 关键字,让我们可以推断出条件中的某个类型,并应用到真分支中。...条件类型作用于泛型上时,如果给定一个联合类型,那么这时候的条件类型是可分配的。

78720

TypeScript 类型体操,无非是语法过度嵌套而已

一些三方工具库的类型直接就不兼容了,那一瞬间就超级想要放弃 TypeScript. 所以就想趁着这个烦躁情绪还在,来跟大家好好吐槽一下 TypeScript,这个让人又爱又恨的技术方案。...二、类型体操,无非过度嵌套而已 TS 的类型体操,透露着一股强烈的过度嵌套味道。...什么时候语法过度嵌套使用还成学习目标了?...五、如何学习 TypeScript 我们只需要明白一个道理,就能具备学好 TS 的基础,那就是:类型体操是基础语法的嵌套。因此,我们只需要去学习 TS 的基础语法就好了。...的必要性 观察 TypeScript 的实践运用 泛型 类型推导是核心 常用高级类型 准确理解类型兼容

17210

TypeScript条件语句

条件语句用于基于不同的条件来执行不同的动作。 TypeScript 条件语句是通过一条或多条语句的执行结果(True 或 False)来决定执行的代码块。...可以通过下图来简单了解条件语句的执行过程: ---- 条件语句 通常在写代码时,您总是需要为不同的决定来执行不同的动作。您可以在代码中使用条件语句来完成该任务。...在 TypeScript 中,我们可使用以下条件语句: if 语句 - 只有当指定条件为 true 时,使用该语句来执行代码 if...else 语句 - 当条件为 true 时执行代码,当条件为 false...default : /* 可选的 */ statement(s); } switch 语句必须遵循下面的规则: switch 语句中的 expression 是一个常量表达式,必须是一个整型或枚举类型...case 的 constant-expression 必须与 switch 中的变量具有相同的数据类型,且必须是一个常量或字面量。

87410

TypeScript类型声明

当我们使用TypeScript编写代码时,类型声明是非常重要的,它帮助我们定义变量、函数、类等的类型,从而提供更好的代码提示、类型检查和代码可读性。...以下是关于TypeScript类型声明的详细内容:基本类型声明在TypeScript中,我们可以使用以下关键字来声明基本类型:let num: number = 42;let str: string =...(Type Assertion)类型断言允许我们手动指定变量的类型,并告诉TypeScript编译器我们知道更多关于变量的类型信息。...: number; readonly id: number;}以上是关于TypeScript类型声明的一些重要内容。通过合理使用类型声明,我们可以增强代码的可读性、类型安全性和可维护性。...类型声明是TypeScript的核心特性之一,可以帮助我们构建更健壮的代码和应用程序。我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

21920
领券