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

TypeScript的另一面:类型编程

对于这一部分来说,无论你先前是只学习过 JS(就像我一样),还是有过 Java、C#的使用经历,都能非常快速地上手,这也是实际开发中使用最多的部分,毕竟和另一块-类型编程比起来,还是这一部分更接地气。...我们再看另一个例子: type Naked = T extends boolean ? "Y" : "N"; type Wrapped = [T] extends [boolean] ?...内置工具类型 在上面我们已经实现了内置工具类型中被使用最多的一个: type Partial = { [K in keyof T]?...另外一种省心的方式是不进行条件类型的判断,直接全量递归所有属性~ 返回键名的工具类型 在有些场景下我们需要一个工具类型,它返回接口字段键名组成的联合类型,然后用这个联合类型进行进一步操作(比如给 Pick...尾声 在结尾说点我个人的理解吧,我认为 TypeScript 项目实际上是需要经过组织的,而不是这一个接口那一个接口,这里一个字段那里一个类型别名,更别说明明可以使用几个工具类型轻松得到的结果却自己重新写了一遍接口

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

    TypeScript 的数组类型

    简介 JavaScript 数组在 TypeScript 里面分成两种类型,分别是: 数组(array) 元组(tuple) TypeScript 数组有一个根本特征:所有成员的类型必须相同...另外,数组类型还有第三种写法,因为很少用到,本章就省略了,详见《interface 接口》一章。 数组类型声明了以后,成员数量是不限制的,任意数量的成员都可以,也可以是空数组。...let arr: number[] = [1, 2, 3]; let foo = arr[3]; // 正确 上面示例中,变量foo的值是一个不存在的数组成员,TypeScript 并不会报错。...我们知道,子类型继承了父类型的所有特征,并加上了自己的特征,所以子类型number[]可以用于所有使用父类型的场合,反过来就不行。...实际上,TypeScript 提供了两个专门的泛型,用来生成只读数组的类型。

    22510

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

    TS中并不能判断在使用联合类型时具体是那种类型?当我们不知道是什么类型的情况下要使用某个类型特有的属性或者方法,那么就可以用断言来实现,它实际上是对编辑器做了提前告知的行为,但是并不能保证运行中报错。...,否则不要使用类型断言,这是因为类型断言会让 TypeScript 编译器将变量当做指定的类型,而不管它实际的类型,在程序运行时可能有类型错误,断言需要慎用。...(); }这里出一个面试题,如下:// 面试题 const a: number | undefined = undefined;const b: number = a!...以VScode编辑器为例点击设置按钮后,选择设置选项图片搜索strictNullChecks,然后勾选下面的选项就可以啦图片(2)肯定断言-肯定化保证赋值含义:允许在实例属性或者变量声明后面放置一个 !...我们可以在变量声明的时候就告诉编辑器该属性一定会被赋值,即在变量名后面加个!符号let score!

    37910

    TypeScript 中的基础类型:原始类型、对象类型、数组类型、元组类型、枚举类型和联合类型

    TypeScript 是一种由微软开发的静态类型编程语言,它是 JavaScript 的超集,并且可以在编译时进行类型检查。...TypeScript 强大的类型系统使得开发者能够更轻松地编写可维护、可扩展的代码。本文将详细介绍 TypeScript 中的基础类型,包括原始类型、对象类型、数组类型、元组类型、枚举类型和联合类型。...可以使用 object 关键字来声明对象类型。对象类型对象类型用于表示一个对象,其中包含多个键值对。可以使用 {} 或者 object 关键字来声明对象类型。对象类型可以指定属性名和属性值的类型。...类型推断和类型断言TypeScript 具有强大的类型推断能力,它可以根据上下文自动推断变量的类型。例如,如果我们在定义变量时直接赋值,TypeScript 可以推断出变量的类型。...总结本文详细介绍了 TypeScript 的基础类型,包括原始类型、对象类型、数组类型、元组类型、枚举类型和联合类型等方面。

    78230

    TypeScript: 常用的高级类型

    可问题在于touch的事件对象与mouse的事件对象是不一样的。那么我们在兼容了这两种事件的回调中,如何去描述该回调的事件对象呢? 通常使用 & 符号来解决这样的常见,将两种类型合并为一种类型。...这样就能够在智能提示中同时访问到两个事件对象的所有属性了。...当然,我们也可以扩展一个数据的类型。 const attr: number | string = 20; 注意体会 & 与 | 的区别 4 类型保护 一个变量,被定义为可能是字符串,也可能是数组。...这种处理,就叫做类型保护。 5 索引类型 我们可以使用 keyof 来获取一个对象中的key对应的具体值。...目标对象的类型,我们不确定,因此,只能使用一个泛型变量做一个简单约束。key值的类型呢?我们可以使用 keyof 从泛型对象中获取。于是又定义另外一个泛型变量 K 来接收获取的结果。

    1.9K10

    TypeScript 中的高级类型

    这些高级类型是 TypeScript 为了增加语言灵活性和应对复杂开发场景而提供的一些语言特性。...二、有哪些 以下是一些常见的高级类型及其应用: 交叉类型 交叉类型通过 & 操作符将多个类型合并为一个类型,新类型包含了所有合并类型的特性。...: type Container = { value: T }; 类型索引 keyof 类似于 Object.keys,用于获取一个类型中所有键的联合类型。...never : T; 三、总结 TypeScript 的高级类型为开发者提供了强大的工具来处理复杂的类型关系和场景。掌握这些高级类型是深入理解和有效使用 TypeScript 的关键。...随着 TypeScript 版本的不断更新,新的特性也在不断加入,因此持续学习和实践是必要的。

    10810

    TypeScript 对象的类型-接口

    一、什么是接口 在 TypeScript 中,我们使用接口(Interfaces)来定义对象的类型 接口是一系列抽象方法的声明,是一些方法特征的集合,第三方可以通过这组抽象方法调用,让具体的类执行具体的方法...age: number; } let faker: Person = { name: 'Faker', age: 25 }; 这里定义了一个接口 Person,接着定义了一个变量...因此赋值时变量的形状必须和接口的形状保持一致 二、可选属性 可选属性是指该属性可以不存在,当我们希望不要完全匹配一个形状,可以用可选属性: interface Person { name: string...string 类型的值 需要注意的是,一旦定义了任意属性,那么确定属性和可选属性的类型都必须是它类型的子集: interface Person { name: string; age?...上例中,任意属性的值允许是 string,但可选属性 age 的值却是 number,number 不是 string 的子属性,所以报错了 注意:一个接口中只能定义一个任意属性 如果接口中有多个类型的属性

    3.4K10

    TypeScript中的类型断言

    ---- 类型断言 类型断言使我们可以覆盖 TypeScript 为存储位置计算的静态类型,这对于解决类型系统的限制很有用。...在 B 行中,我们看到此类型不允许访问任何属性。 在 C 行中,我们用类型断言(运算符 as)告诉 TypeScript data 是一个Array。现在就可以访问属性 .length 了。...类型断言的替代语法 TypeScript 对于类型断言有另一种“尖括号”语法: 1>data 该语法已经过时,并且与 React JSX 代码(在 .tsx 文件中)不兼容。...示例:声明一个接口 为了访问任意对象 obj 的属性 .name,我们暂时将 obj 的静态类型更改为 Named(A行和B行)。...as Dict ,以便可以访问其推断类型为 object 的值的属性。

    3.8K40

    TypeScript 类型系统中一个巧妙的设计

    TypeScript 中的结构类型 当一个对象的属性丢失或类型错误时,TypeScript 会抛出错误。...但是,如果我们多提供了一个额外的属性,TypeScript 就不会报错。...这里面的关键点就是:当我们拥有一个 T 类型的对象时,我们所知道的关于这个对象的一切就是它至少包含 T 中的所有属性。...下面我们再来看一个例子: Object.keys 的不安全使用 假设我们现在要做一个登陆界面,现在我们定义了一个 User 类型: interface User { name: string;...利用结构类型 结构类型给我们提供了很大的灵活性,它允许接口准确地声明它们需要的属性。 下面我们再来举一个例子。 假如我们编写了一个函数,来解析键盘事件并返回要触发的快捷方式。

    26230

    【TypeScript】005-对象的类型——接口 与 数组的类型

    age: 25 }; 上面的例子中,我们定义了一个接口 Person,接着定义了一个变量 tom,它的类型是 Person。...可见,赋值的时候,变量的形状必须和接口的形状保持一致。 可选属性 有时我们希望不要完全匹配一个形状(模板),那么可以用可选属性: 这么就看起来没那么死板了!...需要注意的是,一旦定义了任意属性,那么确定属性和可选属性的类型都必须是它的类型的子集: 这么写就不对了,number不是string的子集!...一个接口中只能定义一个任意属性。如果接口中有多个类型的属性,则可以在任意属性中使用联合类型: interface Person { name: string; age?...上例中,push 方法只允许传入 number 类型的参数,但是却传了一个 "8" 类型的参数,所以报错了。这里 "8" 是一个字符串字面量类型,会在后续章节中详细介绍。

    6600

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

    索引类型是 TypeScript 中的常见类型,它是聚合多个元素的类型,对象、类、元组等都是索引类型。...: TypeScript 也内置了很多基于映射类型实现的工具类型,比如 Partial、Required 等。...总之,会了映射类型就能够对索引类型做各种变换了。 但是,这些都是对索引类型整体做的变换,变换的结果依然是一个索引类型。 有的时候是想把它们分开的。比如这种需求: 希望能把每个索引给分开。...string 的判断之后,再用 Key的时候就是 string 了。...总结 索引类型是 TypeScript 中的常见类型,可以通过映射类型的语法来对它做一些修改,生成新的索引类型。

    1.8K40

    Typescript 类型的本质是什么

    类型分为基础类型和引用类型,基础类型分配在栈上,而引用类型分配在堆上,之所以有引用类型是因为这种类型是复合出来的,比如对象,它可能有任意多个属性,这种就放在可动态分配内存的堆上,然后在栈上记录下该地址,...静态类型语言则是把类型的标识保存在了代码里,也就是有静态类型系统。声明的变量的类型在运行时会分配相应的内存空间,就会赋相同类型的值,就会调用该类型有的方法,如果不是,在编译时就能检查出来。...静态类型系统的 3 个层次 其实静态类型系统分为 3 个层次: 纯静态的类型系统 第一种就是纯静态的类型系统,变量的类型都是定义时声明的,但有一个问题就是遇到参数的类型可能是多种类型的时候会比较麻烦。...、递归、取属性等操作,可以通过复杂的逻辑来生成类型。...javascript 就是动态类型语言,虽然写代码比较简单,但是运行时很容易出类型安全问题,typescript 就是解决了 javascript 没有静态类型系统的问题而做的扩展。

    1.4K10

    Typescript 类型的本质是什么

    类型分为基础类型和引用类型,基础类型分配在栈上,而引用类型分配在堆上,之所以有引用类型是因为这种类型是复合出来的,比如对象,它可能有任意多个属性,这种就放在可动态分配内存的堆上,然后在栈上记录下该地址,...静态类型语言则是把类型的标识保存在了代码里,也就是有静态类型系统。声明的变量的类型在运行时会分配相应的内存空间,就会赋相同类型的值,就会调用该类型有的方法,如果不是,在编译时就能检查出来。...静态类型系统的 3 个层次 其实静态类型系统分为 3 个层次: 纯静态的类型系统 第一种就是纯静态的类型系统,变量的类型都是定义时声明的,但有一个问题就是遇到参数的类型可能是多种类型的时候会比较麻烦。...、递归、取属性等操作,可以通过复杂的逻辑来生成类型。...javascript 就是动态类型语言,虽然写代码比较简单,但是运行时很容易出类型安全问题,typescript 就是解决了 javascript 没有静态类型系统的问题而做的扩展。

    1.6K30

    TypeScript 中的数组类型定义

    在 TypeScript 中声明和初始化数组也很简单,和声明数字类型和字符串类型的变量也差不多,只不过在指定数组类型时要在类型后面加上一个中括号 [] 语法格式 const array_name: dataype...[] = [val, val2]; 示例 声明一个 string 类型的数组 const character: string[] = ["杨过", "小龙女"]; 一维数组类型 声明一个 number...一个数组的元素可以是另外一个数组,这样就构成了多维数组。多维数组的最简单形式是二维数组。...]]; 声明一个二维数组 注意: 以下示例中类型在数组中的,则会限制内层数组的元素数量 Array : 表示内层数组的元素是 string 类型,限制元素数量是 1 个,输入多个会报错...个 建议: 在定义数组类型的时候使用数组泛型定义,这样显得更直观一点 Tuple 元组类型(元组类型允许表示一个已知元素数量和类型的数组)

    5.4K40

    【TypeScript】TS类型断言-类型的声明和转换(七)

    TS中并不能判断在使用联合类型时具体是那种类型?当我们不知道是什么类型的情况下要使用某个类型特有的属性或者方法,那么就可以用断言来实现,它实际上是对编辑器做了提前告知的行为,但是并不能保证运行中报错。...,否则不要使用类型断言,这是因为类型断言会让 TypeScript 编译器将变量当做指定的类型,而不管它实际的类型,在程序运行时可能有类型错误,断言需要慎用。...(); }这里出一个面试题,如下:// 面试题 const a: number | undefined = undefined;const b: number = a!...以VScode编辑器为例点击设置按钮后,选择设置选项搜索strictNullChecks,然后勾选下面的选项就可以啦 (2)肯定断言-肯定化保证赋值含义:允许在实例属性或者变量声明后面放置一个 !...startClass();console.log('' + score); // 使用前赋值function startClass() { score = 5;}编辑器中会直接报错,我们可以在变量声明的时候就告诉编辑器该属性一定会被赋值

    56410
    领券