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

TypeScript进阶

例如:将一个联合类型的变量指定为一个更加具体的类型(但不能指定为联合类型中不存在的类型): // 使用联合类型时,必须使用这些类型共有的属性才行,但使用类型断言使其确定为某一种类型,就没有了此限制。...// 但访问 string 和 number 的共有属性不会报错,如:return something.toString(); 当联合类型的变量在被赋值的时候,会根据类型推论的规则推断出一个类型,此时访问该类型的属性不会报错...对象的类型:接口 在 TS 中,使用接口(Interfaces)来定义对象的类型。 接口Interfaces是对行为的抽象,而具体如何行动是由类classes去实现(implement)。...: number; //设为可选属性 } let tan: Person = { name: 'tan' }; 任意属性 如果有任意属性,那么确定属性和可选属性的类型都必须是任意属性的类型的子集...== -1; } // 相当于接口的属性是函数的参数,返回值是接口的属性值。

98120

TypeScript 官方手册翻译计划【二】:普通类型

当某个值是 any 类型的时候,你可以访问它的任意属性(这些属性也会是 any 类型),可以将它作为函数调用,可以将它赋值给任意类型的值(或者把任意类型的值赋值给它),或者是任何语法上合规的操作: let...当一个函数出现在某个地方,且 TypeScript 可以推断它是如何被调用的时候,该函数的参数会被自动分配类型。...}); 即使这里没有给参数 s 添加类型注解,TypeScript 也可以基于 forEach 函数的类型,以及对于 name 数组类型的推断,来决定 s 的类型。...举个例子,下面是一个接受对象类型作为参数的函数: // 参数的类型注解是一个对象类型 function printCoord(pt: { x: number; y: number }) { console.log...而接口的名字则始终出现在报错信息中 类型别名无法进行声明合并,但接口可以 接口只能用于声明对象的形状,无法为原始类型命名 在报错信息中,接口的名字将始终以原始形式出现,但只限于它们作为名字被使用的时候

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

    分享 30 道 TypeScript 相关面的面试题

    答案:联合类型是一种表示一个值可以属于多种类型之一的方式。例如,如果函数接受字符串和数字作为参数,则可以将其键入为 function example(arg: string | number)。...它们如何发挥作用? 答:泛型允许创建灵活且可重用的组件,而无需牺牲类型安全性。它们充当未来类型的占位符,让您可以编写适用于多种类型的函数、类或接口。...24、TypeScript 中方法重载和函数重载有什么区别? 答案:TypeScript 支持函数重载,即为单个函数声明多个函数类型。然后,编译器将根据函数调用的参数使用适当的类型。...但是,TypeScript 不支持传统的方法重载(您可以定义多个具有相同名称但参数不同的方法)。 相反,您可以使用可选参数或联合类型来实现类似的功能。...25、装饰器如何影响 TypeScript 的类属性和方法? 答:装饰器是作为 JavaScript 提案引入的,是可用于修改或扩展类属性、方法等的特殊函数。

    1K30

    【愚公系列】软考中级-软件设计师 048-面向对象技术(面向对象相关概念)

    这些属性和行为的封装在对象内部,外部的用户只能通过暴露的接口来与汽车对象进行交互。每辆汽车对象都具有清晰的边界和良好定义的行为。...它包括参数多态、包含多态、过载多态和强制多态这四种类型。多态的实现是通过继承机制来支持的。 具体来说,参数多态是指不同类型的参数可以有多种结构类型。...例如,在一个图形绘制的程序中,可以有不同类型的图形对象(如圆形、矩形、三角形)作为参数传入一个绘制方法,每种类型的图形对象会通过自己的绘制方式进行绘制。...例如,使用静态类型的语言如Java中,我们可以声明一个整数变量int x = 5;,在编译时便确定了x的类型为整数。相比之下,动态类型允许类型在运行时才能确定,可以根据变量的赋值来推断其类型。...1.9 静态绑定(静态分配) 静态绑定(静态分配)是基于静态类型的,这意味着在程序执行之前,方法已经被绑定。这意味着编译器可以根据变量的静态类型来确定调用的方法。

    13700

    如何进阶TypeScript功底?一文带你理解TS中各种高级语法

    换句话说接口本身不需要泛型,而在实现使用接口代表的函数类型时需要声明该函数接受一个泛型参数。...keyof 关键字 所谓 keyof 关键字代表它接受一个对象类型作为参数,并返回该对象所有 key 值组成的联合类型。...同时我们定义了一个函数,它接受一个 cb 回调参数作为参数,我们定义了这个回调函数的类型为接受一个 param 为 Son 实例类型的参数,此时我们不关心它的返回值给一个 any 即可。...我们类型定义时并不能立即确定某些类型,而是在使用类型时来根据条件来推断对应的类型。...,函数的参数需要根据传入的泛型来确认后赋给变量 R 所以使用了 infer R 来表示待推断的函数参数类型。

    2.1K10

    TypeScript 学习笔记(一)

    编译型语言:编译为 js 后运行,单独无法运行; 强类型语言; 面向对象的语言; 优势 类型系统实际上是最好的文档,大部分的函数看看类型的定义就可以知道如何使用; 可以在编译阶段就发现大部分错误...不确定一个联合类型的变量到底是哪个类型的时候, 我们只能访问此联合类型的所有类型里共有的属性或方法 function getString(something: string | number): string...id person2.id = 1; // => 编译报错:id为只读, 不可修改 函数类型接口 // 只有参数列表和返回值类型的函数定义, 参数列表里的每个参数都需要名字和类型 interface...此时针对某一个实例,我们无需了解它是 Cat 还是 Dog,就可以直接调用 eat 方法,程序会自动判断出来应该如何执行 eat 存取器(getter & setter):用以改变属性的读取和赋值行为...一个类只能继承自另一个类,不同类之间可能会有一些共有特性,提取多个类的共有特性,作为一个接口,再用 implements 关键字来实现就可以大大提高面向对象的灵活性。

    2.8K10

    一份TypeScript高级类型入门手册,附大量代码实例,值得收藏

    是一个联合类型函数,它接受字符串或者数字作为参数。...Generic Types(泛型) 泛型类型是复用给定类型的一部分的一种方式。它有助于捕获作为参数传递的类型 T。 优点: 创建可重用的函数,一个函数可以支持多种类型的数据。...); // Output: "test" showType(1); // Output: 1 如何创建泛型类型:需要使用并将 T(名称可自定义)作为参数传递。...在上面的代码中,我们传入两个参数:T和U,然后将它们用作id,name的类型。也就是说,我们现在可以使用该接口并提供不同的类型作为参数。...,它需要两个参数 T是要从中选择元素的类型 K是要选择的属性(可以使使用联合类型来选择多个字段) Omit Omit Omit的作用与Pick类型正好相反。

    1.5K30

    一份TypeScript高级类型入门手册,附大量代码实例,值得收藏

    是一个联合类型函数,它接受字符串或者数字作为参数。...Generic Types(泛型) 泛型类型是复用给定类型的一部分的一种方式。它有助于捕获作为参数传递的类型 T。 优点: 创建可重用的函数,一个函数可以支持多种类型的数据。...); // Output: "test" showType(1); // Output: 1 如何创建泛型类型:需要使用并将 T(名称可自定义)作为参数传递。...在上面的代码中,我们传入两个参数:T和U,然后将它们用作id,name的类型。也就是说,我们现在可以使用该接口并提供不同的类型作为参数。...,它需要两个参数 T是要从中选择元素的类型 K是要选择的属性(可以使使用联合类型来选择多个字段) Omit Omit Omit的作用与Pick类型正好相反。

    1.5K40

    TypeScript学习笔记(二)—— TypeScript基础

    5.2、访问联合类型的属性或方法 当 TypeScript 不确定一个联合类型的变量到底是哪个类型的时候,我们只能访问此联合类型的所有类型里共有的属性或方法: function getLength(something...6.1、什么是接口 在面向对象语言中,接口(Interfaces)是一个很重要的概念,它是对行为的抽象,而具体如何行动需要由类(classes)去实现(implement)。...8.4、可选参数 前面提到,输入多余的(或者少于要求的)参数,是不允许的。那么如何定义可选的参数呢? 与接口中的可选属性类似,我们用 ? ...9.2、类型断言的用途 类型断言的常见用途有以下几种: 9.2.1、将一个联合类型断言为其中一个类型 之前提到过,当 TypeScript 不确定一个联合类型的变量到底是哪个类型的时候,我们只能访问此联合类型的所有类型中共有的属性或方法... isApiError,它用来判断传入的参数是不是 ApiError 类型,为了实现这样一个函数,它的参数的类型肯定得是比较抽象的父类 Error,这样的话这个函数就能接受 Error 或它的子类作为参数了

    5.1K20

    【HormonyOS4+NEXT】TypeScript基础语法详解

    如下,我们定义了一个名为greeter的函数,它接受一个string类型的参数person,并返回一个string类型的结果。然后,我们调用这个函数并传入一个字符串变量user作为参数。...move 是一个方法,用于描述动物移动的行为。注意,move 方法有一个默认参数 distanceInMeters,其默认值为 0。...greeter 函数接受一个参数 person,该参数的类型是 Person 接口。...这告诉 TypeScript,我们打算在函数中使用一个或多个类型作为参数。 arg: T:函数参数 arg 的类型被指定为 T,意味着它可以是任何类型。...return arg;:函数返回与参数相同的值,其类型也是 T。 接着,创建了一个 myIdentity 变量,并将 identity 函数赋值给它。这里使用了另一种语法来指定泛型类型参数。

    12110

    计算广告笔记-受众定向核心技术

    ; 定制化标签,可以表示成t(a, u)形式的标签,也是一种用户标签,不同之处在于是针对某一特定广告主而言的,必须根据广告主的某些属性或数据来加工。...行为定向建模问题 行为定向问题的目标是找出在某个类型的广告上eCPM相对较高的人群。通常把某个用户在某类广告上的点击量作为建模的对象。...其中wt为标签t对应的行为定向模型需要优化的参数,n表示不同的行为类型,如搜索、浏览、购买等。...最常用的特征选择函数 xtn(b)x_{tn}(b)xtn​(b) 是将一段时间内的原始用户行为映射到确定的标签体系上,同时计算出各行为在对应标签上的累计强度作为模型的特征输入。 ?...行为定向决策过程 计算线性函数 λ\lambdaλ 的值,然后根据预先确定的阈值来确定某个用户是否该被打上某个定向标签。使用时间衰减特征累计方法的计算公式: ?

    1.5K20

    一份TypeScript高级类型入门手册,附大量代码实例,值得收藏

    是一个联合类型函数,它接受字符串或者数字作为参数。...Generic Types(泛型) 泛型类型是复用给定类型的一部分的一种方式。它有助于捕获作为参数传递的类型 T。 优点: 创建可重用的函数,一个函数可以支持多种类型的数据。...); // Output: "test" showType(1); // Output: 1 如何创建泛型类型:需要使用并将 T(名称可自定义)作为参数传递。...在上面的代码中,我们传入两个参数:T和U,然后将它们用作id,name的类型。也就是说,我们现在可以使用该接口并提供不同的类型作为参数。...,它需要两个参数 T是要从中选择元素的类型 K是要选择的属性(可以使使用联合类型来选择多个字段) Omit Omit Omit的作用与Pick类型正好相反。

    96120

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

    TypeScript 2.1 引入了映射类型,这是对类型系统的一个强大的补充。本质上,映射类型允许w咱们通过映射属性类型从现有类型创建新类型。根据咱们指定的规则转换现有类型的每个属性。...freezePoint 函数接受一个 Point 作为参数并冻结该参数,接着,向调用者返回相同的对象。然而,该对象的类型已更改为FrozenPoint,因此其属性被静态类型化为只读。...keyof T 将 T 类型的所有属性名表示为字符串字面量类型的联合。 方括号中的 in 关键字表示我们正在处理映射类型。...这次咱们使用 Point 类型为例来粗略解释类型映射如何工作。...to parameter of type '"GET" | "POST"' 当然,如果相应的参数只允许两个特定的字符串值,则不允许将任意字符串作为函数参数传递。

    3.8K40

    c++面试题

    它提供了一种接口界面。允许在派生类中对基类的虚函数重新定义。 纯虚函数的作用:在基类中为其派生类保留一个函数的名字,以便派生类根据需要对它进行定义。...作为接口而存在 纯虚函数不具备函数的功能,一般不能直接被调用。 从基类继承来的纯虚函数,在派生类中仍是虚函数。...从实现原理上来说: 重载:编译器根据函数不同的参数表,对同名函数的名称做修饰,然后这些同名函数就成了不同的函数(至少对于编译器来说是这样的)。...当子类重新定义了父类的虚函数后,父类指针根据赋给它的不同的子类指针,动态的调用属于子类的该函数,这样的函数调用在编译期间是无法确定的(调用的子类的虚函数的地址无法给出)。...接口重用:为了类在继承和派生的时候,保证使用家族中任一类的实例的某一属性时的正确调用。

    1.2K21

    Java面向对象回顾

    在调用这个方法时,编译器无法确定具体调用哪个方法,需要在运行期根据对象的实际类型来决定。 多态性可以让程序更加灵活,可以通过继承和接口实现,使代码更加模块化和可扩展。...泛型编程:泛型编程可以使用参数化类型来编写通用的代码,提高代码的复用性和扩展性。 运行时类型识别:通过运行时类型识别,可以在运行时根据对象的实际类型动态地选择调用哪个方法或实现,实现多态性。...具体来说,Java 中的动态绑定是通过虚拟方法表实现的,当程序执行时,虚拟机会根据对象的实际类型在虚拟方法表中查找方法,以确定调用哪个方法。...6、Java 中多态性的最佳实践是什么 使用接口或抽象类定义多态类型:在程序设计时,应当优先考虑定义接口或抽象类作为多态类型,这样可以提高代码的可扩展性和可维护性,同时还能降低代码的耦合度。...尽量使用抽象类而不是具体类作为多态类型:抽象类可以定义一些通用的行为,而具体类则会实现这些行为,因此使用抽象类作为多态类型可以更好地实现代码复用。

    4500

    【文末送书】Typescript 使用日志

    •联合类型,不确定类型是哪个,但能提供几种选择,如:type1 | type2。•交叉类型,必须满足多个类型的组合,如:type1 & type2。...); } } new Cat3(); 接口中的高级用法 接口中的高级用法主要有以下几点: •继承•可选属性•只读属性•索引类型:字符串和数字•函数类型接口•给类添加类型,构造函数类型 接口中除了可以定义常规属性之外...函数中的高级用法主要有以下几点: •函数重载•this 类型 函数重载 函数重载指的是一个函数可以根据不同的入参匹配对应的类型。...那么问题来了,我们怎么去确定运行时到底是什么类型? 答:类型保护。类型保护是针对于联合类型,让我们能够通过逻辑判断,确定最终的类型,是来自联合类型中的哪个类型。...如果你知道如何使用TypeScript编译器tsc来构建配置文件和编译代码,也知道TypeScript中的类型安全、函数和类等基础知识,那将大有裨益。

    2.9K10

    Typescript学习笔记,从入门到精通,持续记录

    当 TypeScript 不确定一个联合类型的变量到底是哪个类型的时候,我们只能访问此联合类型的所有类型里共有的属性或方法 function getLength(something: string |...; //不报错,toString是共有属性 } 联合类型的变量在被赋值的时候,会根据类型推论的规则推断出一个类型; 4.对象的类型—接口 在 TypeScript 中,我们使用接口...在面向对象语言中,接口(Interfaces)是一个很重要的概念,它是对行为的抽象,而具体如何行动需要由类(classes)去实现(implement)。...注意 一旦定义了任意属性,那么确定属性和可选属性的类型都必须是它的类型的子集,一个接口中只能定义一个任意属性。...== -1; }  注意 js中的数组、函数同样都是对象,所以接口定义类型同样适它们 6.1 可选参数  与接口中的可选属性类似,我们用 ?

    2K50

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

    根据咱们指定的规则转换现有类型的每个属性。转换后的属性组成新的类型。 使用映射类型,可以捕获类型系统中类似 Object.freeze() 等方法的效果。...freezePoint 函数接受一个 Point 作为参数并冻结该参数,接着,向调用者返回相同的对象。然而,该对象的类型已更改为FrozenPoint,因此其属性被静态类型化为只读。...keyof T 将 T 类型的所有属性名表示为字符串字面量类型的联合。 方括号中的 in 关键字表示我们正在处理映射类型。...这次咱们使用 Point 类型为例来粗略解释类型映射如何工作。...to parameter of type '"GET" | "POST"' 当然,如果相应的参数只允许两个特定的字符串值,则不允许将任意字符串作为函数参数传递。

    2.9K10

    TypeScript 在实际项目中的应用#2024年度实用技巧

    使用函数类型来声明变量或对象的属性,以描述函数的形状。...这是一种简写形式,其中 TypeScript 根据上下文推断出函数的类型 let add: MathOperation = (x, y) => x + y; 联合类型&类型断言 联合类型允许一个变量具有多种可能的类型...封装 Encapsulation 封装是将对象的状态(属性)和行为(方法)捆绑在一起,形成一个独立的单元 对外部隐藏对象的内部实现细节,只暴露必要的接口 通过封装,可以控制对对象的访问,提高代码的安全性和可维护性...多态 Polymorphism 多态性允许对象以多种形式(类型)存在,即同一个方法可以根据对象的具体类型表现出不同的行为 提高灵活性,允许使用基类类型的变量引用派生类对象,从而实现对不同对象的统一处理...下面这个例子,Lengthwise 是一个包含 length 属性的接口,logLength 函数使用泛型约束,确保传递给它的参数必须包含 length 属性

    7621

    细数这些年被困扰过的 TS 问题

    好的,下面我们来开始介绍第一个问题 —— 如何在 window 对象上显式设置属性。...四、如何理解装饰器的作用 在 TypeScript 中装饰器分为类装饰器、属性装饰器、方法装饰器和参数装饰器四大类。装饰器的本质是一个函数,通过装饰器我们可以方便地定义与对象相关的元数据。...和 @Injectable() 最终会被转换成普通的方法调用,它们的调用结果最终会以数组的形式作为参数传递给 __decorate 函数,而在 __decorate 函数内部会以 Device 类作为参数调用各自的类型装饰器...五、如何理解函数重载的作用 5.1 可爱又可恨的联合类型 由于 JavaScript 是一个动态语言,我们通常会使用不同类型的参数来调用同一个函数,该函数会根据不同的参数而返回不同的类型的调用结果: function...方法重载是指在同一个类中方法同名,参数不同(参数类型不同、参数个数不同或参数个数相同时参数的先后顺序不同),调用时根据实参的形式,选择与它匹配的方法执行操作的一种技术。

    15.3K73
    领券