首页
学习
活动
专区
圈层
工具
发布

TypeScript中的可选属性和只读属性

可选属性 接口里的属性不全都是必需的。 有些是只在某些条件下存在,或者根本不存在。 例如给函数传入的参数对象中只有部分属性赋值了。...带有可选属性的接口与普通的接口定义差不多,只是在可选属性名字定义的后面加一个?符号。如下所示: interface Person { name: string; age?...: number; } 上面的例子中Person对象名字(name)是不可选的,age和gender是可选的。 只读属性 顾名思义就是这个属性是不可写的,对象属性只能在对象刚刚创建的时候修改其值。...你可以在属性名前用 readonly来指定只读属性,如下所示: interface User { readonly loginName: string; password: string...readonly vs const 最简单判断该用readonly还是const的方法是看要把它做为变量使用还是做为一个属性。 做为变量使用的话用const,若做为属性则使用readonly。

3.7K70

TypeScript-可选属性和索引签名

前言本章节要介绍的内容为 TS 接口当中的可选属性和索引签名,如果要想先了解可选属性和索引签名之前首先要来介绍一下接口的注意点,接口的注意点就是如果你使用了接口类型来限定了函数的入参,限定了某个变量,这个时候你调用函数或者使用变量的时候就必须和接口里面的限定一模一样...赋予的值就必须和接口限定的一模一样才可以, 多一个或者少一个都不行好了经过了介绍了如上的注意点了之后就可以来看本章节的内容了,但是有时在企业开发中可以多一个也有可能少一个,那么少一个或少多个怎么做,那么这个时候就可以利用 可选属性...middleName 不传在看看:图片发现报错了,这个时候就需要利用可选属性了,在需要进行可选的属性的接口限定当中添加一个 ?...即可:图片如上所看的是少一个的情况,接下来来看看少多个的情况,只需要在可选的属性接口限定当中添加一个 ?...,接下来来看看多一个或者多多个的可选属性,多一个或者多多个其实就是绕开 TS 检查即可方式一多一个,使用类型断言(告诉 TS 不用管我了)图片interface FullName { firstName

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

    TypeScript自定义类型之对象属性必选、对象属性可选

    ,可选属性实现使用了?...: string | undefined}2.2 Pick>上面得到了可选属性的对象类型,怎么把除了可选属性的其他属性对象类型与可选属性对象类型合并呢,我们最终结果是要一个包括...思路如下:首先需要把可选属性去除,得到一个不包括可选属性的对象类型将剩余属性组成的对象类型与可选属性组成的对象类型交叉,得到最终结果使用TS中的Exclude工具类型,从联合类型中去除指定属性,最终得到联合类型...age:number, class:string}最后将两个对象类型交叉就得到了最终结果。...实现思路具体如下:去除可选属性得到新的对象类型(必填属性对象)抽取出除去必填的属性生成新的代谢(可选属性对象)交叉合并RequiredByKeys = {[P

    1.9K20

    TypeScript-类方法修饰符和TypeScript-类可选属性和参数属性

    前言TypeScript 类方法修饰符用于控制类成员方法的访问权限和行为类的方法修饰符和属性的修饰符一样,只不过方法的修饰符是没有 readonly 的博主假设有这么一个需求: 有一个基类, 所有的子类都需要继承于这个基类...{ super(name, age, gender); }}let stu = new Student('zs', 18, 'female');console.log(stu);可选属性和接口中的可选属性一样..., 可传可不传的属性注意点在 TS 中如果定义了实例属性, 那么就必须在构造函数中使用, 否则就会报错错误示例:class Person { name: string; age: number...this.name = name; this.age = age; }}let p = new Person('BNTang', 18);console.log(p);利用 可选参数...解决不想使用的属性:class Person { name: string; // 可选属性 age?

    48210

    【TypeScript】TS自定义类型之对象属性必选、对象属性可选

    ,可选属性实现使用了?...: string | undefined}2.2 Pick>上面得到了可选属性的对象类型,怎么把除了可选属性的其他属性对象类型与可选属性对象类型合并呢,我们最终结果是要一个包括...思路如下:首先需要把可选属性去除,得到一个不包括可选属性的对象类型将剩余属性组成的对象类型与可选属性组成的对象类型交叉,得到最终结果使用TS中的Exclude工具类型,从联合类型中去除指定属性,最终得到联合类型...age:number, class:string}最后将两个对象类型交叉就得到了最终结果。...实现思路具体如下:去除可选属性得到新的对象类型(必填属性对象)抽取出除去必填的属性生成新的代谢(可选属性对象)交叉合并RequiredByKeys = {[P

    6.1K21

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

    用于将属性设置为可选的。例如,Key?: Type 使 Key 成为可选属性。 readonly 修饰符:readonly 用于将属性设置为只读。...一、布尔类型的转换 在TypeScript中,有时候我们需要将一种类型的属性转换为另一种类型。使用映射类型可以轻松实现这一点。下面我们通过一个具体的例子来展示如何将User类型的属性转换为布尔类型。...同样,在TypeScript中,映射类型可以遍历类型的每个属性并对其进行转换。 二、 将类型属性设为可选 在TypeScript中,我们常常需要将某个类型的所有属性设为可选属性。...掌握这一技巧可以让你在开发TypeScript应用时更加灵活地处理类型转换问题。 三、将可选属性设为必需属性 在TypeScript中,有时我们需要将类型中所有可选属性变为必需属性。...下面我们通过一个具体的例子来展示如何将User类型中的可选属性转换为必需属性。 1.

    62910

    《现代Typescript高级教程》泛型和类型体操

    以下是一些常见的官方内置泛型函数: Partial Partial 是 TypeScript 中的一个内置泛型类型,它可以将给定类型 T 中的所有属性转换为可选属性。...在上面的示例中,Partial 将 Person 接口中的所有属性变为可选属性,从而创建了一个部分完整的 PartialPerson 类型。...Required Required 是 TypeScript 中的另一个内置泛型类型,它可以将给定类型 T 中的所有可选属性转换为必需属性。这对于确保对象的完整性非常有用。...在上面的示例中,Required 将 Person 接口中的所有可选属性变为必需属性,从而创建了一个要求完整性的 RequiredPerson 类型。...Readonly Readonly 是 TypeScript 中的另一个内置泛型函数,它将类型 T 中的所有属性转换为只读属性。

    95830

    什么是TypeScript 接口?

    本文将详细介绍 TypeScript 接口的定义、使用方法和常见应用场景,并提供一些示例来帮助理解。定义接口在 TypeScript 中,使用 interface 关键字来定义一个接口。...可选属性和只读属性在接口定义中,我们可以使用 ? 符号来标记可选属性,表示该属性不是必需的。同时,可以使用 readonly 关键字来标记只读属性,表示该属性在赋值后不能再修改。...以下是一个带有可选属性和只读属性的接口示例:interface Book { readonly title: string; author: string; publishYear?...: number;}在上述代码中,title 属性是只读的,author 属性是必需的,而 publishYear 属性是可选的。接口继承接口可以通过继承其他接口来扩展自身的成员。...我们还探讨了可选属性、只读属性和接口继承等更高级的接口概念。通过充分利用 TypeScript 接口的特性,我们可以在代码中提供更好的类型检查和约束,从而减少错误和提高代码的可维护性。

    67330

    TypeScript - 函数重载

    实现签名接受一个必选的 number 参数和两个可选的 number 参数,并根据这些参数来创建一个 Date 对象。 函数重载的主要优点是它可以提供更精确的类型检查和更好的代码组织。...: string): Person; function createPerson(name: string, age: number): Person { // 实现细节... } // 可以替换为...: number): Person { // 实现细节... } 在这个例子中,我们定义了一个 Person 类型,它具有一个必需的 name 属性,而 age 属性是可选的。...createPerson 函数现在接受一个必需的 name 参数和一个可选的 age 参数,这使得它可以用与重载相同的方式调用。...使用类型断言 类型断言可以用来告诉 TypeScript 编译器,某个参数是特定的类型。

    54610

    【TS 演化史 -- 13】字符串枚举 和 弱类型(Weak Type)探测

    修饰符添加到声明中,将MediaTypes枚举转换为const枚举: const enum MediaTypes { JSON = "application/json", XML = "application...如果类型的所有属性都是可选的,则认为类型是弱类型。更具体地说,弱类型定义一个或多个可选属性,没有必需属性,也没有索引签名。...PrettierConfig的所有属性都是可选的,所以完全可以不指定它们。相反,咱们的prettierConfig对象有一个semicolons 属性,它在prettierConfig类型中不存在。...从 TypeScript 2.4 开始,当属性没有重叠时,给弱类型赋值是一个错误,带有以下消息的类型检查器错误 类型“{ semicolons: boolean; }”与类型“PrettierConfig...这样,类型错误就出现在咱们(错误地)定义semicolons 属性的地方,而不是将prettierConfig参数传递给createFormatter函数的行中。

    1.8K10

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

    概念介绍 TypeScript 中的映射类型和数学中的映射类似,能够将一个集合的元素转换为新集合的元素,只是 TypeScript 映射类型是将一个类型映射成另一个类型。...在我们实际开发中,经常会需要一个类型的所有属性转换为可选类型,这时候你可以直接使用 TypeScript 中的 Partial工具类型: type User = { name: string;...: number | undefined; } */ 这样我们就实现了将 User类型映射成 User2类型,并且将 User类型中的所有属性转为可选类型。 image.png 2....Partial工具类型非常简单的实现将指定类型的所有属性转换为可选类型,那其内容原理又是如何?...符号可以暂时理解为“将可选属性转换为必选属性”,下一节会详细介绍这些符号。 2. Readonly 只读属性 用来将所有属性的类型设置为只读类型,即不能重新分配类型。

    2.6K10

    【TypeScript】超详细的笔记式教程【中】

    与接口中的可选属性类似,用?...,也就是说,可选参数的后面,不能再接必需参数,像这样就不行: 参数默认值 TypeScript会将添加了默认值的参数自动设置为可选参数,举个 function buildName(firstName:...any,举个栗子: const foo: number = 1 foo.length = 1 这样写是不能通过编译的,因为foo是number类型,是没有length属性的,所以TypeScript给了提示类型...但是有时候我们的写法是完全没有问题的,比如: window.foo = 1 在js中,这种写法完全ok,给window添加属性foo,值为1,但是,在TypeScript中是不支持的,它会抛出这个错误类型...,这时候我们就可以用类型断言,把window断言成any,any类型上,访问任何属性都是允许的,像这样: (window as any).foo = 1 ok 将any断言成任何一种类型 举个栗子:

    1.2K20

    TypeScript手记(三)

    需要注意的是,我们传入的对象参数实际上会包含很多属性,但是编译器只会检查那些必需的属性是否存在,以及其类型是否匹配。然而,有些时候 TypeScript 却并不会这么宽松,我们下面会稍做讲解。...还有一点值得提的是,类型检查器不会去检查属性的顺序,只要相应的属性存在并且类型也是对的就可以。 可选属性 接口里的属性不全都是必需的。有些是只在某些条件下存在,或者根本不存在。...,只是在可选属性名字定义的后面加一个 ?...可选属性的好处之一是可以对可能存在的属性进行预定义,好处之二是可以捕获引用了不存在的属性时的错误。..., 并且我们已经学过了可选属性。

    1.1K20
    领券