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

TypeScript-可选属性和索引签名

前言本章节要介绍的内容为 TS 接口当中的可选属性和索引签名,如果要想先了解可选属性和索引签名之前首先要来介绍一下接口的注意点,接口的注意点就是如果你使用了接口类型来限定了函数的入参,限定了某个变量,这个时候你调用函数或者使用变量的时候就必须和接口里面的限定一模一样...${lastName}`);}say({firstName: "BN"});如上所看的都是少属性,接下来来看看多一个或者多多个的可选属性,多一个或者多多个其实就是绕开 TS 检查即可方式一多一个,使用类型断言...let obj = {firstName: "BN", lastName: "Tang", middleName: "666", abc: "123", 123: 123};say(obj);方式三使用 索引签名关于什么是索引签名...,本章节先不用管,下一个章节我会单独在写一篇来进行介绍首先来看看使用索引签名来处理多一个或者多多个参数的情况图片interface FullName { firstName: string

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

TypeScript-索引签名和只读属性

#前言索引签名和只读属性是TypeScript中的两个重要概念。索引签名允许您创建动态属性的对象,提高灵活性,而只读属性通过 "readonly" 关键字确保属性不可被修改,有助于保持对象的不可变性。...这两个特性共同帮助开发者编写更具可维护性和类型安全性的代码索引签名概述索引签名用于描述那些 “通过索引得到” 的类型,比如 arr[10] 或 obj["key"]只要 key 和 value 满足索引签名的限定即可...obj: FullName = { firstName: 'Jonathan', lastName: 'Tang',}console.log(obj["firstName"]);如果不满足接口索引签名限定的类型会报错如下...:图片无论 key 是什么类型最终都会自动转换成字符串类型, 所以如下的代码就没有报错interface FullName { [propName: string]: string}let obj...Jonathan', lastName: 'Tang', false: '666'}console.log(obj["firstName"]);不报错的原理也挺简单的,还是如上那句话 无论key是什么类型最终都会自动转换成字符串类型

19510

TypeScript 演化史 -- 9】object 类型 和 字符串索引签名类型的点属性

TypeScript 2.2 引入了一个新的 object 类型。它表示任何非基本类型。...Object 类型 TypeScript 定义了另一个与新 object 类型几乎同名的类型,那就是 Object 类型。...Object]" obj.toString(); 字符串索引签名类型的点属性 在 TypeScript 2.2 之前,如果想访问带有字符串索引签名类型的任意属性,就必须使用[]符号,但不允许使用.符号访问...在许多情况下,不再需要像这样令人不快的变通方法: // 笨拙的方式 (portNumbers as any).http = 80; 请注意,类型必须定义显式字符串索引签名,以便用.符号访问对任意属性都是类型正确的...给定适当的字符串索引签名,在这些情况下,就会获得更少的类型错误,并且不再需要使用类型注释注释点属性访问,这只是为了让编译器通过。

1.3K10

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

索引类型查询操作符(index type query operator) T[K]:索引访问操作符(indexed access operator): 索引类型查询操作符 keyof T取类型T上的所有...bOrC = obj['c']; // 错误 Type 'number' is not assignable to type 'string | boolean'. bOrC = obj['a']; 索引类型与字符串索引签名...keyof与T[K]同样适用于字符串索引签名(index signature),例如: interface NetCache { [propName: string]: object; } //...}; [K in Keys]形式上与索引签名类似,只是融合了for...in语法。...R : any; 上例中引入了类型变量R表示函数返回类型,并在True分支中引用,从而提取出返回类型 P.S.特殊的,如果存在重载,就取最后一个签名(按照惯例,最后一个通常是最宽泛的)进行推断,例如:

1.7K10

TypeScript 演化史 — 第九章】object 类型 和 字符串索引签名类型的点属性

TypeScript 2.2 引入了一个新的 object 类型。它表示任何非基本类型。...Object 类型 TypeScript 定义了另一个与新 object 类型几乎同名的类型,那就是 Object 类型。...Object]" obj.toString(); 字符串索引签名类型的点属性 在 TypeScript 2.2 之前,如果想访问带有字符串索引签名类型的任意属性,就必须使用[]符号,但不允许使用.符号访问...在许多情况下,不再需要像这样令人不快的变通方法: // 笨拙的方式 (portNumbers as any).http = 80; 请注意,类型必须定义显式字符串索引签名,以便用.符号访问对任意属性都是类型正确的...给定适当的字符串索引签名,在这些情况下,就会获得更少的类型错误,并且不再需要使用类型注释注释点属性访问,这只是为了让编译器通过。

1.4K30

深入解析 TypeScript 索引签名:通过 4 个实例轻松掌握

TypeScript中,索引签名是一种定义对象键和值类型的机制。它规定了对象的键和值之间的契约关系,使得我们可以为具有动态键的对象定义类型。 基本概念 索引签名通过指定键和值的类型来约束对象的结构。...希望这个例子能帮助你更好地理解和应用TypeScript中的索引签名。...在TypeScript中,索引签名对于创建复杂的工具类型至关重要,因为它们允许在保持类型安全的同时,实现灵活和动态的数据结构。...虽然TypeScript内置了一个实用类型 Partial 来实现这一点,但为了更好地理解索引签名,让我们创建一个自定义的工具类型 Optional,实现相同的功能。...结尾 索引签名TypeScript中的一个强大功能,它允许你为具有未知结构的对象定义类型。在创建类似字典的数据结构或定义复杂的工具类型时,索引签名尤其有用。

2100

TypeScript 官方手册翻译计划【八】:类型操控-按索引访问的类型

说明:目前网上没有 TypeScript 最新官方文档的中文翻译,所以有了这么一个翻译计划。...因为我也是 TypeScript 的初学者,所以无法保证翻译百分之百准确,若有错误,欢迎评论区指出; 翻译内容:暂定翻译内容为 TypeScript Handbook,后续有空会补充翻译文档的其它部分;...项目地址:TypeScript-Doc-Zh,如果对你有帮助,可以点一个 star ~ 本章节官方文档地址:Indexed Access Type 按索引访问的类型 我们可以访问某个类型上的特定属性...这种类型称为按索引访问的类型。...number; name: string; alive: boolean }; type Age = Person["age"]; ^^^ // type Age = number 索引类型本身也是一个类型

48030

TypeScript类型声明

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

21920

TypeScript 元组类型

在 JavaScript 中是没有元组的,元组是 TypeScript 中特有的类型,其工作方式类似于数组。 元组可用于定义具有有限数量的未命名属性的类型。每个属性都有一个关联的类型。...很明显元组类型 [number, string] 的长度是 2,在位置索引 2 处不存在任何元素。 三、元组类型的可选元素 与函数签名类型,在定义元组类型时,我们也可以通过 ?...针对这种情形,在 TypeScript 中就可以利用元组类型可选元素的特性来定义一个元组类型的坐标点,具体实现如下: type Point = [number, number?, number?]...point3D); }; const xyzCoordinate: Point3D = [10, 20, 30]; // 使用字面量的形式设置值 drawPoint(10, 20, 30); // 使用索引的方式来访问...六、只读的元组类型 TypeScript 3.4 还引入了对只读元组的新支持。我们可以为任何元组类型加上 readonly 关键字前缀,以使其成为只读元组。

1.4K20

TypeScript交叉类型&联合类型

一、交叉类型(Intersection types)什么事交叉类型呢?简单来说就是通过&符号将多个类型进行合并成一个类型,然后用type来声明新生成的类型。...这里分两种情况,如果同名属性的类型相同则合并后还是原本类型,如果类型不同,则合并后类型为never2.基本数据类型交叉any和number交叉结果是any类型,any和boolean交叉结果是any类型...,如下图所示:3.2 键的类型是对象类型A、B、C三个类型都有相同的键inner,但是键的数据类型不同,分别是D、E、F,此时A&B&C会将inner键的类型进行合并,其实是D、E、F的交叉类型。...,当键的类型是不同的字面量类型,则交叉后类型为never类型。...二、联合类型(Union types)联合类型和交叉类型比较相似,联合类型通过|符号连接多个类型从而生成新的类型。它主要是取多个类型的交集,即多个类型共有的类型才是联合类型最终的类型

45810

TypeScript类型断言

什么是类型断言 类型断言是可以手动指定一个值得类型 类型断言 let num3:number|string="10" num3=20 console.log(num3.length) 通过如上代码,当我们获取...length的时候会报错因为我们赋值为20所以不存在属性length,那么我们就可以采用类型断言去做处理 值 function getAssert(name:string|number) {...return (name).length; } 值as类型 function getAssert(name:string|number) { return (name as string...).length; } 因为只有在我们为string类型的时候才有length属性,所以这一块我们要采用类型断言的方式进行处理....通过如下代码我们可以发现会出现异常正如下方图片所示,因为他并非是强制类型转换,他只能断言联合类型中存在的类型.不存在的类型是不允许的. function getAssert(name:string|number

71810
领券