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

TypeScript映射类型

TypeScript映射类型 TypeScript 官方文档早已更新,但我能找到中文文档都还停留在比较老版本。所以对其中新增以及修订较多一些章节进行了翻译整理。...映射类型(Mapped Types) 有的时候,一个类型需要基于另外一个类型,但是你又不想拷贝一份,这个时候可以考虑使用映射类型。...映射类型建立在索引签名语法上,我们先回顾下索引签名: // 当你需要提前声明属性类型时 type OnlyBoolsAndHorses = { [key: string]: boolean |...(Mapping Modifiers) 在使用映射类型时,有两个额外修饰符可能会用到,一个是 readonly,用于设置属性只读,一个是 ?...(Key Remapping via as) 在 TypeScript 4.1 及以后,你可以在映射类型中使用 as 语句实现键名重新映射: type MappedTypeWithNewProperties

63910

TypeScript-映射类型

映射类型概述 根据 旧 类型创建出 新 类型, 我们称之为映射类型 假如如下 TestInterface1 是旧类型: interface TestInterface1 { name:...string, age: number } 那么这个时候根据 TestInterface1 创建出来类型就称之为映射类型,例如如下 TestInterface2: interface...将原有类型 部分 内容映射到新类型中 interface TestInterface { name: string, age: number } type MyType = Pick...Record 映射类型 他会将一个类型所有属性映射到另一个类型上并创造一个新类型 type Animal = 'person' | 'dog' | 'cat'; interface TestInterface...由映射类型进行推断 对于 Readonly,Partial 和 Pick 映射类型, 我们可以对映射之后类型进行拆包 还原映射之前类型, 这种操作我们称之为 拆包 interface MyInterface

19320
您找到你想要的搜索结果了吗?
是的
没有找到

TypeScript系列教程九《类型转换》-- 映射类型

类型转换是TS最好玩也是语言灵魂,想玩好需要熟练各种手段和工具,下面一一介绍类型转换一些常用手段。...Mapped Types ---- 有时候对象属性类型重复或者一个类型基于另一个了类型时候 映射类型基于索引签名语法构建,用于声明尚未提前声明属性类型: type OnlyBoolsAndHorses...,OptionsFlags将会把Type所有的属性当做key,所有的类型变成boolean type FeatureFlags = { darkMode: () => void; newUserProfile...在TypeScript 4.1及更高版本中,您可以使用映射类型as子句重新映射映射映射类型: type MappedTypeWithNewProperties = { [...,例如,这里有一个使用条件类型映射类型,该类型根据对象属性pii是否设置为文本true返回true或false: type ExtractPII = { [Property in keyof

1.2K10

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

(n => o[n]); } pluck函数能从o中摘出来names指定那部分属性,存在2个类型约束: 参数names中只能出现o身上有的属性 返回类型取决于参数o身上属性类型 这两条约束都可以通过泛型来描述...其中: K:类型变量,依次绑定到每个属性上,对应每个属性名类型 Keys:字符串字面量构成联合类型,表示一组属性名(类型) boolean:映射结果类型,即每个属性类型 类似的,[P in keyof...T]只是找keyof T作为(属性名)类型集,从而对现有类型映射得到新类型 P.S.另外,Partial与Readonly都能够完整保留源类型信息(从输入类型中取属性名及类型,仅存在修饰符上差异...R : any; (摘自TypeScript/lib/lib.es5.d.ts) 具体示例见Predefined conditional types 四.总结 除类型组合外,另2种产生新类型方式是类型查询与类型映射...类型查询: 索引类型:取现有类型一部分产生新类型 类型映射映射类型:对现有类型映射得到新类型 条件类型:允许以类型兼容关系为条件进行简单三目运算,用来表达非均匀类型映射 参考资料 Advanced

1.7K10

TypeScript 类型体操:合并映射类型处理结果为联合类型

索引类型TypeScript常见类型,它是聚合多个元素类型,对象、类、元组等都是索引类型。...: TypeScript 也内置了很多基于映射类型实现工具类型,比如 Partial、Required 等。...外层映射类型 [Key in keyof Obj] 就是对每个 Key 做处理,它也是一个映射类型,而 Key2 来自于刚才 Key,那么这样映射完之后类型就是这样: 这时你取 name 就是这样...: 而传入联合类型时候,会分别传入每个类型做处理,也就是这样: 所以直接在这里取 keyof Obj 所有索引: 总结一下:当我们需要把索引分开时候,可以加一层映射类型,在位置对每个索引做处理...总结 索引类型TypeScript常见类型,可以通过映射类型语法来对它做一些修改,生成新索引类型

1.6K40

TypeScript 官方手册翻译计划【十】:类型操控-映射类型

项目地址:TypeScript-Doc-Zh,如果对你有帮助,可以点一个 star ~ 本章节官方文档地址:Mapped Types 映射类型 有时候我们不想重复编写代码,这时候就需要基于某个类型创建出另一个类型...索引签名用于为那些没有提前声明属性去声明类型,而映射类型是基于索引签名语法构建。...,它使用 PropertyKey(属性联合类型(通常通过 keyof 创建)去遍历所有的,从而创建一个新类型: type OptionsFlags = { [Property...in keyof Type]: boolean; }; 在这个例子中,OptionsFlags 会接受类型 Type 所有属性,并将它们改为布尔。...在 TypeScript4.1 或者更高版本中,你可以在映射类型中使用 as 子句实现重新映射: type MappedTypeWithNewProperties = { [

76250

【TS】1294- 搞懂 TypeScript映射类型(Mapped Types)

本文会和大家详细介绍 TypeScript映射类型(Mapped Type),看完本文你将学到以下知识点: 数学中映射和 TS 中映射类型关系; TS 中映射类型应用; TS 中映射类型修饰符应用...这样就能很好实现映射过程复用。 二、TypeScript映射类型是什么? 1....概念介绍 TypeScript映射类型和数学中映射类似,能够将一个集合元素转换为新集合元素,只是 TypeScript 映射类型是将一个类型映射成另一个类型。...:将类型设置为可选类型; { [P in keyof T] ?...: T[P] | undefined}:遍历 keyof T返回联合类型,并定义用 P变量接收,其每次遍历返回为可选类型 T[P]。

2.2K10

TypeScript 演化史 -- 7】映射类型和更好字面量类型推断

. ---- 为了保证可读性,本文采用意译而非直译。 TypeScript 2.1 引入了映射类型,这是对类型系统一个强大补充。本质上,映射类型允许w咱们通过映射属性类型从现有类型创建新类型。...此外,TypeScript 定义了其他映射类型,这些映射类型在各种情况下都非常有用。...更好字面量类型推断 字符串、数字和布尔字面量类型(如:"abc",1和true)之前仅在存在显式类型注释时才被推断。从 TypeScript 2.1 开始,字面量类型总是推断为默认。...已经初始化且不带类型注解 let 变量、var 变量、形参或非 readonly 属性类型推断为初始扩展字面量类型。...试图更改其他位置会导致编译时错误。因此,推断只读类属性字面量类型是合理,因为它不会改变。

2.8K10

涉及类型都是interface

与原生字典相同,并发安全字典对类型也是有要求。它们同样不能是函数类型、字典类型和切片类型。...另外,由于并发安全字典提供方法涉及类型都是interface{},遴选真题所以我们在调用这些方法时候,往往还需要对实际类型进行检查。这里大致有两个方案。...我们今天主要提到了第一种方案,这是在编码时就完全确定类型,然后利用 Go 语言编译器帮我们做检查。...,尤其是在计算机拥有多个 CPU 核心情况下。...因此,我们常说,能用原子操作就不要用锁,不过这很有局限性,毕竟原子只能对一些基本数据类型提供支持。http://lx.gongxuanwang.com/sszt/7.htm

71030

探索TypeScript映射类型,从简单到高级7个实例

keyof 操作符:keyof 是TypeScript一个操作符,它返回一个类型所有属性名联合类型。...never 类型:never 类型表示没有。它通常在条件类型中用于过滤掉某些属性。 ? 操作符:? 用于将属性设置为可选。例如,Key?: Type 使 Key 成为可选属性。...通过这些概念,我们可以更深入地了解TypeScript映射类型,并通过实际例子来掌握它们用法。接下来,我们将逐步展示从简单到高级7个映射类型实例,让你轻松掌握这一强大类型转换工具。...一、布尔类型转换 在TypeScript中,有时候我们需要将一种类型属性转换为另一种类型。使用映射类型可以轻松实现这一点。下面我们通过一个具体例子来展示如何将User类型属性转换为布尔类型。...同样,在TypeScript中,映射类型可以遍历类型每个属性并对其进行转换。 二、 将类型属性设为可选 在TypeScript中,我们常常需要将某个类型所有属性设为可选属性。

9010

TS 类型体操:索引类型映射映射

TypeScript 给 JavaScript 加了套静态类型系统。其中,JavaScript 中数组、对象等聚合多个元素类型TypeScript 中对应是索引类型。...: number; gender: boolean; } 我们知道,TypeScript 支持类型编程,也就是对类型参数(范型)做各种运算,产生新类型: type IsString = T...true: false; 那么对于索引类型,如何做运算并产生新类型呢? 答案是映射类型映射类型 映射类型就是用于构造新索引类型。...总结 TypeScript 通过索引类型来表示有多个元素聚合类型,比如数组、对象等。 TS 支持类型编程,也就是对类型参数做各种运算然后返回新类型。...对索引类型当然也可以做运算,对应类型就是映射类型映射类型在生成新索引类型过程中,还可以加上或去掉 readonly、?修饰符。

92410

TypeScript 演化史 — 第七章】映射类型和更好字面量类型推断

TypeScript 2.1 引入了映射类型,这是对类型系统一个强大补充。本质上,映射类型允许w咱们通过映射属性类型从现有类型创建新类型。根据咱们指定规则转换现有类型每个属性。...更多映射类型示例 上面已经看到 lib.d.ts 文件中内置 Readonly 类型。此外,TypeScript 定义了其他映射类型,这些映射类型在各种情况下都非常有用。...更好字面量类型推断 字符串、数字和布尔字面量类型(如:"abc",1和true)之前仅在存在显式类型注释时才被推断。从 TypeScript 2.1 开始,字面量类型总是推断为默认。...已经初始化且不带类型注解 let 变量、var 变量、形参或非 readonly 属性类型推断为初始扩展字面量类型。...试图更改其他位置会导致编译时错误。因此,推断只读类属性字面量类型是合理,因为它不会改变。

3.7K40

TypeScript函数类型

{ return x+y; }; 注意不要混淆了 TypeScript => 和 ES6 中 =>。...在 TypeScript 类型定义中,=> 用来表示函数定义,左边是输入类型,需要用括号括起来,右边是输出类型。...==-1; } 采用函数表达式|接口定义函数方式时,对等号左侧进行类型限制,可以保证以后对函数名赋值时保证参数个数、参数类型、返回类型不变。...参数默认 在 ES6 中,我们允许给函数参数添加默认TypeScript 会将添加了默认参数识别为可选参数: function buildName(firstName:string,lastName...在编辑器代码提示中,可以正确看到前两个提示。 注意,TypeScript 会优先从最前面的函数定义开始匹配,所以多个函数定义如果有包含关系,需要优先把精确定义写在前面。

2K30

TypeScript 数组类型

let arr: number[] = [1, 2, 3]; let foo = arr[3]; // 正确 上面示例中,变量foo是一个不存在数组成员,TypeScript 并不会报错。...数组类型推断 如果数组变量没有声明类型TypeScript 就会推断数组成员类型。这时,推断行为会因为不同,而有所不同。...如果变量初始是空数组,那么 TypeScript 会推断数组类型是any[]。...(string|number)[] 上面示例中,数组变量arr初始是空数组,然后随着新成员加入,TypeScript 会自动修改推断数组类型。...但是,类型推断自动更新只发生初始为空数组情况。如果初始不是空数组,类型推断就不会更新。 只读数组,const 断言 JavaScript 规定,const命令声明数组变量是可以改变成员

11610

TypeScript: 常用高级类型

,我们通常会将枚举类型描述展示在页面上,因此此时如果使用枚举来表达会存在一些问题。...per: string | string[] 我们在代码编写时,希望能够自动提示对应api,typescript则不知道应该如何处理这种情况。...这种处理,就叫做类型保护。 5 索引类型 我们可以使用 keyof 来获取一个对象中key对应具体。...结合泛型,用一个复杂例子来体验一下: 我们来封装这样一个方法:对于一个对象,当我们指定对应key数组时,希望能够得到所有key对应value数组。 需要思考几个问题。...目标对象类型,我们不确定,因此,只能使用一个泛型变量做一个简单约束。key类型呢?我们可以使用 keyof 从泛型对象中获取。于是又定义另外一个泛型变量 K 来接收获取结果。

1.9K10

TypeScript 对象类型-接口

一、什么是接口 在 TypeScript 中,我们使用接口(Interfaces)来定义对象类型 接口是一系列抽象方法声明,是一些方法特征集合,第三方可以通过这组抽象方法调用,让具体类执行具体方法...TypeScript 中接口除了可用于对类一部分行为进行抽象以外,还可用于对「对象形状(Shape)」进行描述 举个例子: interface Person { name: string;...let faker: Person = { name: 'Faker', gender: 'male' }; 使用 [propName: string] 定义了任意属性取 string 类型...上例中,任意属性允许是 string,但可选属性 age 却是 number,number 不是 string 子属性,所以报错了 注意:一个接口中只能定义一个任意属性 如果接口中有多个类型属性...fn:any = faker.words; console.log(fn()); 输出结果为: Hello Hello World **Hello World** 六、接口和数组 接口中我们可以将数组索引和元素设置为不同类型

3.3K10

TypeScript类型断言-类型声明和转换

TS中并不能判断在使用联合类型时具体是那种类型?当我们不知道是什么类型情况下要使用某个类型特有的属性或者方法,那么就可以用断言来实现,它实际上是对编辑器做了提前告知行为,但是并不能保证运行中报错。...,否则不要使用类型断言,这是因为类型断言会让 TypeScript 编译器将变量当做指定类型,而不管它实际类型,在程序运行时可能有类型错误,断言需要慎用。...;//这里使用断言无效,a已经有明确console.log(b);// 上面的代码会编译成const a = undefined;const b = a;console.log(b); // undefined...比如以下案例:我们知道obj一定是有,请求接口后赋值给obj,所以一定是有,但是我们直接赋值,就会报错const obj = {};obj.name = 'zhangsan';obj.age =...;我们可以改成这样就不会报错啦const obj:Object = {};(obj).name = 'zhangsan';(obj).age = 19;(4)调用函数时将参数和返回断言成精确

29510
领券